rocketmq环境构建
windows下构建
http://rocketmq.apache.org/release_notes/release-notes-4.5.1/ ,下载 Binary
系统环境变量配置
变量名:ROCKETMQ_HOME
变量值:MQ解压路径\MQ文件夹名
启动NAMESERVER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭。
启动BROKER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。
1、修改配置
找到rocketmq-console/src/main/resources/application.properties 根据需求,修改配置
# 管理后台访问上下文路径,默认为空
# 如果填写,需写成/xxx的形式,例如/console
server.contextPath=
# 控制台的端口
server.port=8080
...
# if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
# Name Server地址
rocketmq.config.namesrvAddr=
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket
#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
rocketmq.config.loginRequired=false
这里只修改其中两项
# console端口 server.port=17890 # name server地址 # 也可以不修改,在启动完console后,在控制台导航栏 - 运维 - NameSvrAddrList一栏设置 rocketmq.config.namesrvAddr=localhost:9876
2、修改依赖
修改 pom.xml ,修改RocketMQ相关依赖的版本
找到
<rocketmq.version>4.4.0</rocketmq.version>
修改为
<rocketmq.version>你的RocketMQ版本</rocketmq.version>
使用的是RocketMQ 4.5.1,故而改为
<rocketmq.version>4.5.1</rocketmq.version>
3、修改代码
修改pom.xml后,org.apache.rocketmq.console.service.impl.MessageServiceImpl#queryMessageByTopic编译会报错,所以需要解决一下。将
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, null);
改为:
RPCHook rpcHook = null;
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook);
4、打包构建
# 切换到代码根目录 cd rocketmq-externals # 切换到控制台目录 cd rocketmq-console # 构建 mvn clean package -DskipTests
5、懒人包可以直接下载这一个使用
https://github.com/eacdy/rocketmq-externals/releases
6、访问
http://localhost:17890
RocketMq术语概念
1、Topic主题,一类消息的集合,RocketMQ的基本订阅单位
2、消息模型,Producer 生产消息,生产者,Broker 消息代理,存储消息,转发消息,Consumer 消费者,消费消息
3、部署结构,NameServer 名字服务,生产者/消费者通过名字服务查找各主题相应的Broker,BrokerServer代理服务角色,消息中转角色,负责存储消息,转发消息
4、消费模式,Pull Consumer 拉取式消费,应用调用Consumer的拉取消息方法从Broker Server拉取消息,Push Consumer推动式消费,Broker收到消息后主动推送给消费端,该模式实时性较高。
5、Group组,Producer Group生产组,同一类Producer的集合,这类Producer发送同一类消息,通常具有同样属性(处理的消息种类-topic、以及消息处理逻辑流程—分布式多个客户端)的一些
producer可以归为同一个group。在事务消息机制中,如果某条发送某条消息的producer-A宕机,使得事务消息一直处于PREPARED状态并超时,则broker会回查 同一个group的其他producer,确认
这条消息应该commit还是rollback。Consumer Group 具有同样逻辑消费同样消息的consumer,可以归并为一个group。同一个group内的消费者,可以共同消费(CLUSTERING)对应topic的消息,
达到分布式并行处理的功能。
6、Clustering集群,相同Consumer Group的每个Consumer实例平均分摊消息,Broadcasting 广播相同Consumer Group的每个consumer实例接收全量的消息。
7、普通消息,顺序消息,定时/延时消息,事务消息。
rocketmq开发者指南
Spring Cloud 集成rocketmq
1、加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
2、加注解
rocketmq:
name-server: 127.0.0.1:9876
producer:
#必须指定group
group: testGroup
3、写配置
4、写代码
@GetMapping("/testRocketTemplate")
public String testRocketTemplate(@RequestParam String a){
this.rocketMQTemplate.convertAndSend("topic", RocketMessage.builder().message("xiaofeiyang").build());
return "success";
}
@Service
@RocketMQMessageListener(topic ="topic",consumerGroup = "consumer-group")
public class ConsumerListener implements RocketMQListener<RocketMessage> {
@Override
public void onMessage(RocketMessage rocketMessage) {
}
}
5、分布式事务
1.Commit:提交事务消息,消费者可以消费此消息
2.Rollback:回滚事务消息,broker会删除此消息,消费者不能消费
3.UNKNOWN:broker需要回查确认该消息的状态
------------恢复内容开始------------
windows下构建
http://rocketmq.apache.org/release_notes/release-notes-4.5.1/ ,下载 Binary
系统环境变量配置
变量名:ROCKETMQ_HOME
变量值:MQ解压路径\MQ文件夹名
启动NAMESERVER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动NAMESERVER。成功后会弹出提示框,此框勿关闭。
启动BROKER
Cmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true’,启动BROKER。成功后会弹出提示框,此框勿关闭。
1、修改配置
找到rocketmq-console/src/main/resources/application.properties 根据需求,修改配置
# 管理后台访问上下文路径,默认为空
# 如果填写,需写成/xxx的形式,例如/console
server.contextPath=
# 控制台的端口
server.port=8080
...
# if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
# Name Server地址
rocketmq.config.namesrvAddr=
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
#set the message track trace topic if you don't want use the default one
rocketmq.config.msgTrackTopicName=
rocketmq.config.ticketKey=ticket
#Must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
rocketmq.config.loginRequired=false
这里只修改其中两项
# console端口 server.port=17890 # name server地址 # 也可以不修改,在启动完console后,在控制台导航栏 - 运维 - NameSvrAddrList一栏设置 rocketmq.config.namesrvAddr=localhost:9876
2、修改依赖
修改 pom.xml ,修改RocketMQ相关依赖的版本
找到
<rocketmq.version>4.4.0</rocketmq.version>
修改为
<rocketmq.version>你的RocketMQ版本</rocketmq.version>
使用的是RocketMQ 4.5.1,故而改为
<rocketmq.version>4.5.1</rocketmq.version>
3、修改代码
修改pom.xml后,org.apache.rocketmq.console.service.impl.MessageServiceImpl#queryMessageByTopic编译会报错,所以需要解决一下。将
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, null);
改为:
RPCHook rpcHook = null;
DefaultMQPullConsumer consumer = new DefaultMQPullConsumer(MixAll.TOOLS_CONSUMER_GROUP, rpcHook);
4、打包构建
# 切换到代码根目录 cd rocketmq-externals # 切换到控制台目录 cd rocketmq-console # 构建 mvn clean package -DskipTests
5、懒人包可以直接下载这一个使用
https://github.com/eacdy/rocketmq-externals/releases
6、访问
http://localhost:17890
RocketMq术语概念
1、Topic主题,一类消息的集合,RocketMQ的基本订阅单位
2、消息模型,Producer 生产消息,生产者,Broker 消息代理,存储消息,转发消息,Consumer 消费者,消费消息
3、部署结构,NameServer 名字服务,生产者/消费者通过名字服务查找各主题相应的Broker,BrokerServer代理服务角色,消息中转角色,负责存储消息,转发消息
4、消费模式,Pull Consumer 拉取式消费,应用调用Consumer的拉取消息方法从Broker Server拉取消息,Push Consumer推动式消费,Broker收到消息后主动推送给消费端,该模式实时性较高。
5、Group组,Producer Group生产组,同一类Producer的集合,这类Producer发送同一类消息,通常具有同样属性(处理的消息种类-topic、以及消息处理逻辑流程—分布式多个客户端)的一些
producer可以归为同一个group。在事务消息机制中,如果某条发送某条消息的producer-A宕机,使得事务消息一直处于PREPARED状态并超时,则broker会回查 同一个group的其他producer,确认
这条消息应该commit还是rollback。Consumer Group 具有同样逻辑消费同样消息的consumer,可以归并为一个group。同一个group内的消费者,可以共同消费(CLUSTERING)对应topic的消息,
达到分布式并行处理的功能。
6、Clustering集群,相同Consumer Group的每个Consumer实例平均分摊消息,Broadcasting 广播相同Consumer Group的每个consumer实例接收全量的消息。
7、普通消息,顺序消息,定时/延时消息,事务消息。
rocketmq开发者指南
Spring Cloud 集成rocketmq
1、加依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
2、加注解
rocketmq:
name-server: 127.0.0.1:9876
producer:
#必须指定group
group: testGroup
3、写配置
4、写代码
@GetMapping("/testRocketTemplate")
public String testRocketTemplate(@RequestParam String a){
this.rocketMQTemplate.convertAndSend("topic", RocketMessage.builder().message("xiaofeiyang").build());
return "success";
}
@Service
@RocketMQMessageListener(topic ="topic",consumerGroup = "consumer-group")
public class ConsumerListener implements RocketMQListener<RocketMessage> {
@Override
public void onMessage(RocketMessage rocketMessage) {
}
}
5、分布式事务
1.Commit:提交事务消息,消费者可以消费此消息
2.Rollback:回滚事务消息,broker会删除此消息,消费者不能消费
3.UNKNOWN:broker需要回查确认该消息的状态
Spring cloud stream
一个用于构建消息驱动的微服务框架

1、Destination Binder 目标绑定器,与消息中间件通信的组件
2、Destination Bindings(目标绑定),Bindings目标绑定,Binding是连接应用程序跟消息中间件的桥梁,用于消息的消息和生产,由binder创建
3、Message消息
6、消息过滤
1、condition
@StreamListener(value = Sink.INPUT,condition = "headers['myheader']=='value'")
public void receive(String messageBody){
log.info("通过stream收到消息:"+messageBody);
}
2、tags只支持rocketmq
@Autowired
private Source source;
public String testStream() {
this.source.output()
.send(
MessageBuilder
.withPayload("消息体")
// 注意:只能设置1个tag
.setHeader(RocketMQHeaders.TAGS, "tag1")
.build()
);
return "success";
}
spring:
cloud:
stream:
rocketmq:
binder:
name-server: 127.0.0.1:9876
bindings:
input1:
consumer:
# 表示input2消费带有tag1的消息
tags: tag1
input2:
consumer:
# 表示input2消费带有tag2或者tag3的消息
tags: tag2||tag3
bindings:
input1:
destination: test-topic
group: test-group1
input2:
destination: test-topic
group: test-group2
3、sql
-
在
conf/broker.conf添加enablePropertyFilter = true -
启动RocketMQ
nohup sh bin/mqbroker -n localhost:9876 -c ./conf/broker.conf &
生产者
@Autowired
private Source source;
public String testStream() {
this.source.output()
.send(
MessageBuilder
.withPayload("消息体")
.setHeader("index", 1000)
.build()
);
return "success";
}
-
接口
public interface MySink { String INPUT1 = "input1"; String INPUT2 = "input2"; @Input(INPUT1) SubscribableChannel input(); @Input(INPUT2) SubscribableChannel input2(); } -
注解
@EnableBinding({MySink.class}) -
spring: cloud: stream: rocketmq: binder: name-server: 127.0.0.1:9876 bindings: input1: consumer: sql: 'index < 1000' input2: consumer: sql: 'index >= 1000' bindings: input1: destination: test-topic group: test-group1 input2: destination: test-topic group: test-group2 -
消费代码
@Service @Slf4j public class MyTestStreamConsumer { /** * 我消费带有tag1的消息 * * @param messageBody 消息体 */ @StreamListener(MySink.INPUT1) public void receive1(String messageBody) { log.info("index > 1000的消息被消费了:messageBody ={}", me435ssageBody); } /** * 我消费带有tag1或者tag2的消息 * * @param messageBody 消息体 */ @StreamListener(MySink.INPUT2) public void receive2(String messageBody) { log.info("index <=1000 的消息被消费了:messageBody ={}", messageBody); } }
spring cloud stream 异常处理
https://www.imooc.com/article/290435
Spring Cloud Stream+RocketMq实现分布式事务
1、代码
this.source.output().send(
MessageBuilder.withPayload(rocketMessage)
.setHeader("share_id",0).
setHeader(RocketMQHeaders.TRANSACTION_ID,UUID.randomUUID().toString()).
setHeader("dto",rocketMessage)
.build()
);
2、配置
stream:
rocketmq:
binder:
name-server: 127.0.0.1:9876
bindings:
output:
producer:
transactional: true
group: tx-ProducerGroup
bindings:
output:
destination: stream-test-topic
input:
destination: stream-test-topic
#rocketmq必须指定group,其他mq可以不设置
group: binder-group
MY-OUTPUT:
destination: stream-myoutput-topic
MY-INPUT:
destination: stream-myoutput-topic
group: my-binder-group
spring cloud stream 总结
https://www.imooc.com/article/290489
浙公网安备 33010602011771号