RocketMQ入门(3.发送同步消息之可靠同步发送)

原理:同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通讯方式。

应用场景:此种方式应用场景非常广泛,例如重要通知邮件、报名短信通知、营销短信系统等。

RocketMQ入门(3.发送同步消息之可靠同步发送)_第1张图片


直接上代码

jar包依赖:


    com.aliyun.openservices
    ons-client
    1.2.4

生产者:

package yangjiachang.mq.producter;

import com.aliyun.openservices.ons.api.*;

import java.util.Properties;

/**
 * Created by yangjiachang on 2016/8/1.
 */
public class SyncProducerTest {

    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put(PropertyKeyConst.ProducerId, "PID_YJC_DEMO_02");// 您在MQ控制台创建的Producer ID
        properties.put(PropertyKeyConst.AccessKey, "rIa4vosh93cvU79x");// 鉴权用AccessKey,在阿里云服务器管理控制台创建
        properties.put(PropertyKeyConst.SecretKey, "Cp3Mqo0UgqbLfRU5dSCboxLHei73M8");// 鉴权用SecretKey,在阿里云服务器管理控制台创建
        Producer producer = ONSFactory.createProducer(properties);
        // 在发送消息前,必须调用start方法来启动Producer,只需调用一次即可
        producer.start();
        //循环发送消息
        Message msg = new Message( //
                // Message Topic
                "yjc_mq_demo",
                // Message Tag,
                // 可理解为Gmail中的标签,对消息进行再归类,方便Consumer指定过滤条件在MQ服务器过滤
                "demo3",
                // Message Body
                // 任何二进制形式的数据, MQ不做任何干预,
                // 需要ProducerConsumer协商好一致的序列化和反序列化方式
                "Hello MQ".getBytes());
        // 设置代表消息的业务关键属性,请尽可能全局唯一,以方便您在无法正常收到消息情况下,可通过MQ控制台查询消息并补发
        // 注意:不设置也不会影响消息正常收发
        msg.setKey("demo003");
        // 发送消息,只要不抛异常就是成功
        // 打印Message ID,以便用于消息发送状态查询
        SendResult sendResult = producer.send(msg);
        System.out.println("Send Message success. Message ID is: " + sendResult.getMessageId());
    }
    // 在应用退出前,可以销毁Producer对象
    // 注意:如果不销毁也没有问题
//        producer.shutdown();

}

消费者:

package yangjiachang.mq.consumer;


import com.aliyun.openservices.ons.api.*;

import java.util.Properties;

/**
 * Created by yangjiachang on 2016/8/1.
 */
public class SyncConsumerTest {

    public static void main(String[] args) {

        Properties properties = new Properties();
        properties.put(PropertyKeyConst.ConsumerId, "CID_YJC_DEMO_01");// 您在MQ控制台创建的Consumer ID
        properties.put(PropertyKeyConst.AccessKey, "rIa4vosh93cvU79x");// 鉴权用AccessKey,在阿里云服务器管理控制台创建
        properties.put(PropertyKeyConst.SecretKey, "Cp3Mqo0UgqbLfRU5dSCboxLHei73M8");// 鉴权用SecretKey,在阿里云服务器管理控制台创建
        Consumer consumer = ONSFactory.createConsumer(properties);
        consumer.subscribe("yjc_mq_demo", "*", new MessageListener() {
            public Action consume(Message message, ConsumeContext context) {
                System.out.println("Receive: " + message);
                System.out.println("Receive messageBody: " + new String(message.getBody()));
                return Action.CommitMessage;
            }
        });
        consumer.start();
        System.out.println("Consumer Started");

    }
}


执行生产者SyncProducerTest代码:

Send Message success. Message ID is: C0A8917E24741D44BCFA0B77342F0000


执行消费者SyncConsumerTest代码:

Consumer Started
Receive: Message [topic=yjc_mq_demo, systemProperties={KEYS=demo003, __KEY=demo003, __RECONSUMETIMES=0, __MSGID=C0A8917E24741D44BCFA0B77342F0000, MIN_OFFSET=0, __TAG=demo3, TAGS=demo3, MAX_OFFSET=17}, userProperties={UNIQ_KEY=C0A8917E24741D44BCFA0B77342F0000, MSG_REGION=cn-qingdao-publictest, CONSUME_START_TIME=1470218073582}, body=8]
Receive messageBody: Hello MQ


到这里就可以看出SyncProducerTest产生了一条Message ID为C0A8917E24741D44BCFA0B77342F0000的消息已经被SyncConsumerTest所接收。

你可能感兴趣的:(RocketMQ)