大概記一下RocketMQ和Spring boot的整合

關於怎麼搭建RockerMQ先不講

首先生產者

 <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.0.3</version>
  </dependency>
application.properties
rocketmq.producer.group=CMS
rocketmq.name-server=172.20.5.2:9876;
Controller
public class BookController {
    @Autowired
    private RocketMQTemplate template;
    @GetMapping("/books")
    public ModelAndView books(){
        List<Book> books = new ArrayList<>();
        //至於爲什麼用這個MessageBuilder 完全是爲了與消費者對應 消費者也用的Message(MessageExt)類型 只不過這個有時間戳
        //或者得到重試次數 以及許多參數當然你也可以直接寫String 生產者重試次數是兩次 有三種方式發送 同步 異步 和 one way
        //前兩種都有返回結果SendResult 下面代碼默認是同步 他也有SendResult 只不過藏在代碼裏 下面的topic:tag 是有講究的在可視化界面
        //直觀的看到了
        template.convertAndSend("topic:tag", MessageBuilder.withPayload("111111111111111111").build());

消費者

package com.example.demo;

import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;

@Component
//topic selectExpression對應生產者的 consumerGroup隨便寫
@RocketMQMessageListener(topic = "topic",selectorExpression = "tag",consumerGroup = "listener1")
public class MessageListener1 implements RocketMQListener<MessageExt> {
    @Override
    public void onMessage(MessageExt messageExt) {

        try {
            //消費者發生異常或重試 默認是重試16次有一定時間間隔 1s 2S 5s 10s 30S 1min
            int i= 0;
            i =i/0;
            String messageStr = new String(messageExt.getBody(), "UTF-8");
            System.out.println("我是listener1"+messageStr);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}

這個下面有消費者 not online 我們忽略掉就好 我們只需要關注 not yet consume  和consume 兩種狀態

另外RocketMq 有兩種消費模式 默認是集羣 比如你發了二十條消息 有兩個一模一樣的消費者 

consumerGroup = "listener1"必須一樣(不一樣就和廣播效果一樣當做兩個消費者處理) 然後兩個平分二十條 至於廣播就一人消費20條 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章