这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
前言
之前我们讲了rocketmq的概念,让我们书接上文,这次来讲一下RocketMQ的具体使用方法,目前公司主推的MQ就是RocketMQ,前前后后看了一点点源码,用了一个月,讲一下基础部分。可以满足大家的日常业务需求。
回顾
RocketMQ是一个高性能支持分布式的搭建的一款消息队列,他的吞吐量非常高,是阿里巴巴开源的一款中间件,在我上大学时,当时同学做毕设有一个问题:我用的python写的后端服务器如何跟你的java进行通讯呢?当时由于技术力过低最后放弃了异构,但是RocketMQ就可以做到通讯的一个作用,完美的解决上述问题,当然MQ有许多的应用场景,上述只是其中一种,它还可以用来做削峰填谷等抗住并发压力,给服务器带来高性能回报。
前提
在开始使用MQ之前我们需要导入MQ的包,这里由于我是公司的项目,所以我采用的包是官方给出的starter自动装配包,配合SpringBoot可以快速搭建项目,实现敏捷开发。当然你也可以选择导入原生MQ包,详细请读者去Maven中央仓库自行获取。
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
复制代码
consumer
引入Mq jar包后,点击jar包可以发现他的文件中有一个这个注解
通过这个注解我们可以实现简单地消费者监听,配合topic实现连接MQ Broker来获取信息。
@Component
@RocketMQMessageListener( //重点注解
consumerGroup = "wopen_gateway_consumer_group",
topic = "${stong.wopen.rocketmq.topic.gateway}") // 采用yml来注入值
@Slf4j
public class GatewayConsumer implements RocketMQListener<DeviceVo>{
@Autowired
private GatewayService service;
@Autowired
private PushMessageService pushMessageService;
@Override
public void onMessage(DeviceVo gatewayVo) {
//业务逻辑处理
}
}
复制代码
通过yml的形式来注入topic可以实现不修改代码情况下更换topic。
producer
生产者基于MQ的官方start包更便于开发者使用,这里演示同步方法的调用,异步与单向发送是一样的,只是返回结果不同而已。
@Autowired
private RocketMQTemplate mqTemplate; // 注入Mqtemplate
@Value("${wftp.rocketmq.topic.aerator}") // 注入需要发送的Topic 一样与上面消费者采用可配置topic
private String aeratorTopic;
复制代码
就一句话 ,比之前的原生发送简单了一万倍,其他的异步与同步也是一样得,异步要注意一下有个回调需要你自己处理一下。
SendResult sendResult = mqTemplate.syncSend(aeratorTopic, 业务数据);
复制代码