一、RocketMQ 支持 3 种消息发送方式 :
1、同步消息(sync message )
producer向 broker 发送消息,执行 API 时同步等待, 直到broker 服务器返回发送结果 。
2、异步消息(async message)
producer向 broker 发送消息时指定消息发送成功及发送异常的回调方法,调用 API 后立即返回,producer发送消息线程不阻塞 ,消息发送成功或失败的回调任务在一个新的线程中执行 。
3、单向消息(oneway message)
producer向 broker 发送消息,执行 API 时直接返回,不等待broker 服务器的结果 。
二、RocketMQ消息结构
RocketMQ的消息包括基础属性和扩展属性两部分:
1、基础属性
1)topic : 主题相当于消息的一级分类,具有相同topic的消息将发送至该topic下的消息队列中,比方说一个电商系统可以分为商品消息、订单消息、物流消息等,就可以在broker中创建商品主题、订单主题等,所有商品的消息发送至该主题下的消息队列中。
2)消息体:即消息的内容 ,可以的字符串、对象等类型(可系列化)。消息的最大长度 是4M。
3) 消息 Flag:消息的一个标记,RocketMQ不处理,留给业务系统使用。
2、扩展属性
1)tag :相当于消息的二级分类,用于消费消息时进行过滤,可为空 。
2)keys: Message 索引键,在运维中可以根据这些 key 快速检索到消息, 可为空 。 3)waitStoreMsgOK :消息发送时是否等消息存储完成后再返回 。
Message 的基础属性主要包括消息所属主题 topic , 消息 Flag(RocketMQ 不做处理)、 扩展属性、消息体 。
三、同步消息
1、创建test-rocketmq生产者工程
1) 创建一个test-rocketmq的测试工程专门用于rocketmq的功能测试。
test-rocketmq父工程的pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> mq com.pbteach1.0-SNAPSHOT4.0.0 test-rocketmq pomorg.apache.rocketmq rocketmq-spring-boot-starter org.springframework.boot spring-boot-starter-test org.springframework.boot spring-boot-starter-web
2)创建rocketmq-producer生产者工程
rocketmq-producer的pom.xml如下
<?xml version="1.0" encoding="UTF-8"?> test-rocketmq com.pbteach1.0-SNAPSHOT4.0.0 rocketmq-producer
3) 新建rocketmq-producer工程 的application.yml文件
server: port: 8181 #服务端口 servlet: context-path: /rocketmq-producer spring: application: name: rocketmq-producer #指定服务名 rocketmq: nameServer: 127.0.0.1:9876 producer: group: demo-producer-group
4)新建启动类
/** * @author 攀博课堂(www.pbteach.com) * @version 1.0 **/@SpringBootApplication public class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); } }
2、发送同步消息
package com.pbteach.test.rocketmq.message; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; /** * rocketmq发送消息类 * @author 攀博课堂(www.pbteach.com) * @version 1.0 **/ @Component public class ProducerSimple { @Autowired private RocketMQTemplate rocketMQTemplate; /** * 发送同步消息 * @param topic * @param msg */ public void sendSyncMsg(String topic, String