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

posted @ 2019-10-25 15:35  夜的那种黑丶  阅读(3706)  评论(0编辑  收藏  举报