package com.softmax.mq.courier.rocket.example;

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 同步消息: 同步传输广泛应用于重要通知消息,短信通知,短信营销系统等
 *
 * @author Jarvis
 * @date 2018/9/6
 */
public class SyncProducer {

    final static String NAMESRVADDR = "192.168.10.100:9876";

    public static void main(String[] args) throws MQClientException {
        //声明并初始化一个producer
        DefaultMQProducer producer = new DefaultMQProducer("SYNC_MQ_GROUP");
        //设置NameServer地址,此处应改为实际NameServer地址,多个地址之间用;分隔
        producer.setNamesrvAddr(NAMESRVADDR);
        producer.setInstanceName("SYNC_PRODUCER");
        // 设置重试次数,默认2
        producer.setRetryTimesWhenSendFailed(3);
        //大于3.5.3版本要设置为false 否则取不到topic
        producer.setVipChannelEnabled(false);
        //设置发送超时时间,默认是3000
        producer.setSendMsgTimeout(10000);
        //调用start()方法启动一个producer实例
        producer.start();
        producer.setRetryTimesWhenSendAsyncFailed(0);

        System.out.println("producer start");
        for (int i = 0; i < 10; i++) {
            try {
                Message msg = new Message("Sync_TopicA_Test",
                        "Sync_TagA",
                        ("RocketMQ message " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)
                );
                //发送消息
                SendResult sendResult = producer.send(msg);
                System.out.printf("%s%n", sendResult);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        //发送完消息之后,调用shutdown()方法关闭producer
        producer.shutdown();

        System.out.println("producer shutdown");
    }
}