编写生产者

集成

添加依赖

<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

Spring Cloud Alibaba学习笔记(10) - Spring消息编程模型下,使用RocketMQ收发消息的更多相关文章

  1. Spring 源码学习笔记10——Spring AOP

    Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...

  2. Spring Cloud Alibaba学习笔记(1) - 整合Spring Cloud Alibaba

    Spring Cloud Alibaba从孵化器版本毕业:https://github.com/alibaba/spring-cloud-alibaba,记录一下自己学习Spring Cloud Al ...

  3. Spring Cloud Alibaba学习笔记(14) - Spring Cloud Stream + RocketMQ实现分布式事务

    发送消息 在Spring消息编程模型下,使用RocketMQ收发消息 一文中,发送消息使用的是RocketMQTemplate类. 在集成了Spring Cloud Stream之后,我们可以使用So ...

  4. Spring Cloud Alibaba学习笔记

    引自B站楠哥:https://space.bilibili.com/434617924 一.创建父工程 创建父工程hello-spring-cloud-alibaba Spring Cloud Ali ...

  5. Spring Cloud Alibaba学习笔记(15) - 整合Spring Cloud Gateway

    Spring Cloud Gateway 概述 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于Netty.Reactor以及WEbFlux构建,它 ...

  6. Spring Cloud Alibaba学习笔记(3) - Ribbon

    1.手写一个客户端负载均衡器 在了解什么是Ribbon之前,首先通过代码的方式手写一个负载均衡器 RestTemplate restTemplate = new RestTemplate(); // ...

  7. Spring Cloud Alibaba学习笔记(22) - Nacos配置管理

    目前业界流行的统一配置管理中心组件有Spring Cloud Config.Spring Cloud Alibaba的Nacos及携程开源的Apollo,本文将介绍Nacos作为统一配置管理中心的使用 ...

  8. Spring Cloud Alibaba学习笔记(2) - Nacos服务发现

    1.什么是Nacos Nacos的官网对这一问题进行了详细的介绍,通俗的来说: Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题: 1.服务A如何发现服务B 2.管理微服务的配置 ...

  9. Spring Cloud Alibaba学习笔记(12) - 使用Spring Cloud Stream 构建消息驱动微服务

    什么是Spring Cloud Stream 一个用于构建消息驱动的微服务的框架 应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互, ...

  10. Spring Cloud Alibaba学习笔记(11) - RocketMQ事务消息

    在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这 ...

随机推荐

  1. C#读取Word指定页的内容

    /// <summary> /// Word按页读取内容 /// </summary> /// <param name="page">页数< ...

  2. 蓝牙BLE: GATT Profile 简介(GATT 与 GAP)

    一. 引言 现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上.GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很 ...

  3. (E2E_L2)包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解【正确的目录添加方法】

    VS项目中的包含目录.库目录.附加包含目录.附加库目录.附加依赖项均在"项目->属性->配置属性"下进行配置 一.具体说明如下: 1.VC++目录:     包含目录: ...

  4. python脚本使用源码安装不同版本的python

    # coding=utf-8 import os import sys # 判断是否是root用户 if os.getuid() == 0: pass else: print('当前用户不是root用 ...

  5. scons 简单入门

    scons 简单入门 摘自:https://www.jianshu.com/p/e4bd3ab9e5d6 0.2042019.01.20 12:58:44字数 1201阅读 3021 简单入门 hel ...

  6. hadoop记录-flink测试

    1.启动集群 bin/start-cluster.sh 2.jps查看进程 3.打开网页端(192.168.66.128:8081) 4.造数据:nc -lk 9000 5.执行./bin/flink ...

  7. Anti Pattern - ThreadLocal variables with Thread Pool(转)

    In a previous post, I wrote the usage and benefits of ThreadLocal based instance variables in concur ...

  8. Vue个人笔记

    目录 前言 Vue的插值表达式怎么保留小数位 表格列被挤,位置很小 v-if多个条件 前言 此笔记仅仅记录我在使用过程中遇到的一些问题,不定期更新 Vue的插值表达式怎么保留小数位 插值表达式其实都是 ...

  9. Swift4.0复习错误处理

    1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...

  10. idea中报Can't start Git: git.exe The path to Git executable is probably not valid. Fix it

    解决办法,点解Fix it,或者File ----setting------version control-------git,设置git的可执行文件路径就可以了 设置好了git的安装路径的可运行文件 ...