Spring Cloud Alibaba學習筆記(10) - Spring消息編程模型下,使用RocketMQ收發消息


編寫生產者

集成

添加依賴

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.0.3</version>
</dependency>

PS:由於默認引入的rocketmq-spring-boot-starter版本為2.0.2,rocketmq-spring-boot-starter對應的RocketMQ相關依賴為4.0.0,與前文中提交的4.5.1不能完全兼容,所以需要指定rocketmq-spring-boot-starter版本為2.0.3。

添加配置

rocketmq:
  name-server: 127.0.0.1:9876
  producer:
    group: test-group

若代碼中用到了RocketMQTemplate類,則group是必填的,否則會導致應用啟動失敗,無法初始化RocketMQTemplate

代碼實現

  • 首先,注入RocketMQTemplate
    private final RocketMQTemplate rocketMQTemplate;

  • 編寫代碼,使用convertAndSend方法:
    rocketMQTemplate.convertAndSend("test-topic", Demo.builder().demoId(1).remark("哈哈哈").build());
    test-topic為topic名稱;Demo是我隨便建立的一個實體類,為消息體

啟動項目,調用請求,然后會RocketMQ控制台,消息頁面,可以從主題下拉框中找到剛剛新建的 test-topic,點擊搜索,就可以看見這條消息

如果使用的是其他的MQ的話,將RocketMQTemplate退換以下類:
ActiveMQ/Artemis:JmsTemplate
RabbitMQ:AmpqTemplate
Kaka:KafkaTemplate

編寫消費者

集成

同生產者集成

代碼實現

新建DemoListener類【類名根據自己的業務】,實現RocketMQListener接口,RocketMQListener是一個泛型類,泛型就是生產者發出的消息體。
加上@Service注解,讓DemoListener給Spring管理。
加上@RocketMQMessageListener注解,表明這個RocketMQ的Listener,配置topic屬性,必須與生產者的屬性相一致,否則接受不到生產者發出的消息;配置consumerGroup屬性,值任意。
代碼如下:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "test-consumer")
public class DemoListener implements RocketMQListener<Demo> {
    @Override
    public void onMessage(Demo demo) {
        log.info("---->我收到了消息了!");
        log.info("---->" + demo.getDemoId());
        log.info("---->" + demo.getRemark());
    }
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class Demo{
    private Integer demoId;
    private String remark;
}

測試結果:

如果使用的是其他的MQ的話,將@RocketMQMessageListener退換以下注解,實現接口相應改變:
ActiveMQ/Artemis:JmsListener
RabbitMQ:RabbitListener
Kaka:KafkaListener


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM