com.alibaba.rocketmq.client.producer.TransactionMQProducer Java Examples

The following examples show how to use com.alibaba.rocketmq.client.producer.TransactionMQProducer. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: TransactionProducer.java    From reading-and-annotate-rocketmq-3.4.6 with GNU General Public License v3.0 5 votes vote down vote up
public static void main(String[] args) throws MQClientException, InterruptedException {

        //事务决断处理类
        TransactionCheckListener transactionCheckListener = new TransactionCheckListenerImpl();
        TransactionMQProducer producer = new TransactionMQProducer("please_rename_unique_group_name");
        producer.setCheckThreadPoolMinSize(2);
        producer.setCheckThreadPoolMaxSize(2);
        producer.setCheckRequestHoldMax(2000);
        producer.setTransactionCheckListener(transactionCheckListener);
        producer.start();

        String[] tags = new String[] { "TagA", "TagB", "TagC", "TagD", "TagE" };
        TransactionExecuterImpl tranExecuter = new TransactionExecuterImpl();
        for (int i = 0; i < 100; i++) {
            try {
                Message msg =
                        new Message("TopicTest", tags[i % tags.length], "KEY" + i,
                            ("Hello RocketMQ " + i).getBytes());
                SendResult sendResult = producer.sendMessageInTransaction(msg, tranExecuter, null);
                System.out.println(sendResult);

                Thread.sleep(10);
            }
            catch (MQClientException e) {
                e.printStackTrace();
            }
        }

        for (int i = 0; i < 100000; i++) {
            Thread.sleep(1000);
        }

        producer.shutdown();

    }
 
Example #2
Source File: MqProducer.java    From RocketMqCurrencyBoot with Apache License 2.0 5 votes vote down vote up
@PostConstruct
private void init() throws MQClientException
{
	if (transaction == null || transactionExecuter == null)
	{
		DefaultMQProducer defaultProducer = new DefaultMQProducer();
		// Producer 组名, 多个 Producer 如果属于一 个应用,发送同样的消息,则应该将它们 归为同一组
		defaultProducer.setProducerGroup(ProducerGroupName);
		// Name Server 地址列表
		defaultProducer.setNamesrvAddr(NamesrvAddr);
		// 生产者名称
		defaultProducer.setInstanceName(InstanceName);
		// 超时时间
		defaultProducer.setSendMsgTimeout(SendMsgTimeout);
		defaultProducer.start();
		producer = defaultProducer;
	}
	else
	{
		TransactionMQProducer transactionProducer = new TransactionMQProducer();
		// Producer 组名, 多个 Producer 如果属于一 个应用,发送同样的消息,则应该将它们 归为同一组
		transactionProducer.setProducerGroup(ProducerGroupName);
		// Name Server 地址列表
		transactionProducer.setNamesrvAddr(NamesrvAddr);
		// 生产者名称
		transactionProducer.setInstanceName(InstanceName);
		// 超时时间
		transactionProducer.setSendMsgTimeout(SendMsgTimeout);
		transactionProducer.setCheckThreadPoolMinSize(checkThreadPoolMinSize);
		transactionProducer.setCheckThreadPoolMaxSize(checkThreadPoolMaxSize);
		transactionProducer.setCheckRequestHoldMax(checkRequestHoldMax);
		transactionProducer.setTransactionCheckListener(transaction);
		transactionProducer.start();
		producer = transactionProducer;
	}

}
 
Example #3
Source File: TransactionProducer.java    From RocketMQ-Master-analyze with Apache License 2.0 5 votes vote down vote up
public static void main(String[] args) throws MQClientException, InterruptedException {

        TransactionCheckListener transactionCheckListener = new TransactionCheckListenerImpl();
        TransactionMQProducer producer = new TransactionMQProducer("please_rename_unique_group_name");
        // 事务回查最小并发数
        producer.setCheckThreadPoolMinSize(2);
        // 事务回查最大并发数
        producer.setCheckThreadPoolMaxSize(2);
        // 队列数
        producer.setCheckRequestHoldMax(2000);
        producer.setTransactionCheckListener(transactionCheckListener);
        producer.start();

        String[] tags = new String[] { "TagA", "TagB", "TagC", "TagD", "TagE" };
        TransactionExecuterImpl tranExecuter = new TransactionExecuterImpl();
        for (int i = 0; i < 100; i++) {
            try {
                Message msg = new Message("TopicTest", tags[i % tags.length], "KEY" + i,
                    ("Hello RocketMQ " + i).getBytes());
                SendResult sendResult = producer.sendMessageInTransaction(msg, tranExecuter, null);
                System.out.println(sendResult);

                Thread.sleep(10);
            }
            catch (MQClientException e) {
                e.printStackTrace();
            }
        }

        for (int i = 0; i < 100000; i++) {
            Thread.sleep(1000);
        }

        producer.shutdown();

    }
 
Example #4
Source File: MqProducer.java    From RocketMqCurrencyBoot with Apache License 2.0 4 votes vote down vote up
/**
 *  发送数据到MQ方法  
 * 
 * @param Topic   队列名称
 * @param Tags	     标签名称
 * @param body	  发送的数据  推荐 JSOM 或者 XML 结构
 * @param Encoding  数据编码格式  默认UTF-8
 * @return   响应信息进行了内部处理  确认已经保存到 MQ 并且    日志已经记录  只要值不是NULL 就是成功发送
 * @throws UnsupportedEncodingException  转换字符集出错  请检查是否可以转换 
 */
public SendResult send(String Topic, String Tags, String body, String Encoding)
		throws UnsupportedEncodingException
{

	String loggerString = MessageFormat.format(
			"将要发送到Mq的数据    Topic={0}   Tags={1}   body={2}  Encoding={3} ", Topic, Tags, body,
			Encoding);

	if (Encoding == null || "".equals(Encoding))
	{
		Encoding = "UTF-8";
	}

	if (Tags == null || "".equals(Tags))
	{
		Tags = "*";
	}

	LOGGER.info(loggerString);

	Message me = new Message();
	// 标示
	me.setTopic(Topic);
	// 标签
	me.setTags(Tags);
	// 内容
	me.setBody(body.getBytes(Encoding));
	// 发送信息到MQ SendResult 是当前发送的状态 官方说 不出异常 就是成功
	SendResult sendResult = null;
	try
	{
		if (producer instanceof TransactionMQProducer)
		{
			sendResult = ((TransactionMQProducer) producer).sendMessageInTransaction(me,
					transactionExecuter, null);

		}
		else
		{
			sendResult = ((DefaultMQProducer) producer).send(me);
		}
	}
	catch (Exception e)
	{
		LOGGER.error(" 发送 数据给MQ出现异常  " + loggerString, e);
	}
	// 当消息发送失败时如何处理 getSendStatus 获取发送的状态
	if (sendResult == null || sendResult.getSendStatus() != SendStatus.SEND_OK)
	{
		LOGGER.info(loggerString + "发送消息失败" + " MQ状态值  SendResult=" + sendResult);
		sendResult = null;
	}
	LOGGER.info("发送到MQ成功" + sendResult);
	return sendResult;
}