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

posted on 2020-02-25 21:56  清浊  阅读(643)  评论(0)    收藏  举报