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

来源:互联网 发布:java 引用js文件 编辑:程序博客网 时间:2024/05/16 02:12

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

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



直接上代码

jar包依赖:

<dependency>    <groupId>com.aliyun.openservices</groupId>    <artifactId>ons-client</artifactId>    <version>1.2.4</version></dependency>

生产者:

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所接收。

1 0
原创粉丝点击