RocketMQ在Springboot项目中的应用

本文详细讲解了如何在Spring Boot应用中配置RocketMQ,包括生产者与消费者的创建、消息类型区分与订阅策略,以及自动配置和监听器的实现。

注意

看此篇之前,你需要了解RocketMQ在本地是如何工作的,如果还不会请先去找找资源学习一下哦

配置文件

application.yml中关于RocketMQ的配置如下:

bg:
  rocketmq:
    #   namesrvAddr地址
    #    namesrvAddr: 0.0.0.0:9876
    namesrvAddr: 192.168.2.68:9876
    #  生产者group名称
    producerGroupName: producerGroupName
    #  事务生产者group名称
    transactionProducerGroupName: transactionProducerGroupName
    #  消费者group名称
    consumerGroupName: consumerGroupName
    #  生产者实例名称
    producerInstanceName: producerInstanceName
    #  消费者实例名称
    consumerInstanceName: consumerInstanceName
    #  事务生产者实例名称
    producerTranInstanceName: producerTranInstanceName
    #  一次最大消费多少数量消息
    consumerBatchMaxSize: 1
    #  广播消费
    consumerBroadcasting: false
    #  消费的topic:tag
    subscribe[0]: TopicTest1:TagA
    #  启动的时候是否消费历史记录
    enableHisConsumer: false
    #  启动顺序消费
    enableOrderConsumer: false

SpringBoot自动配置(核心)

需要写一个专门去读以bg.rockmq开头的配置并且需要注解

@Data
@ConfigurationProperties(RocketmqProperties.PREFIX)
public class RocketmqProperties {
   
   
    public static final String PREFIX = "dg.rocketmq";
    private String namesrvAddr;
    private String producerGroupName;
    private String transactionProducerGroupName;
    private String consumerGroupName;
    private String producerInstanceName;
    private String consumerInstanceName;
    private String producerTranInstanceName;
    private int consumerBatchMaxSize;
    private boolean consumerBroadcasting;
    private boolean enableHisConsumer;
    private boolean enableOrderConsumer;
    private List<String> subscribe = new ArrayList<>();
  }

根据SpringBoot的自动注入的原理还需要一个类来搞这个事

/**
 * Producer:消息生产者,负责生产消息,一般由业务系统负责生产消息。
 *
 *   Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。
 *
 *   Push Consumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立刻回调Linsener接口方法
 *
 *   Pull Consumer:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制
 *
 *   Consumer Group:一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。
 *
 *   Broker:消息中转角色,负责存储消息,转发消息,一般也称为Server,在JMS规范中成为Provider
 *
 *   Topic: 一个Topic有四个Queue
 */

@Configuration("MQConfiguration")
@EnableConfigurationProperties(RocketmqProperties.class)
@ConditionalOnProperty(prefix = RocketmqProperties.PREFIX, value = "namesrvAddr")
public class RocketmqAutoConfiguration {
   
   
	private static final Logger log = LogManager.getLogger(RocketmqAutoConfiguration.class);
	@Autowired
	private RocketmqProperties properties;
	@Autowired
	private ApplicationEventPublisher publisher;

	private static boolean isFirstSub = true;

	private static long startTime = System.currentTimeMillis();

	/**
	 * 初始化向rocketmq发送普通消息的生产者
	 *
	 * @throws Exception
	 */
    @Bean("DefaultMQProducer")
	@ConditionalOnProperty(prefix = RocketmqProperties.PREFIX, value = "producerInstanceName")
	public DefaultMQProducer defaultProducer() throws Exception {
   
   
		/**
		 * 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
		 * 注意:ProducerGroupName需要由应用来保证唯一<br>
		 * ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,
	
RocketMQSpringboot是两个非常流行的开源项目,他们都可以在大规模分布式系统中发挥重要作用。RocketMQ是一个高性能、可靠、可扩展的分布式消息中间件,支持发布/订阅、点对点、异步等消息传递模式。Springboot是一个用于创建微服务的框架,可以快速、方便地搭建基于Spring的应用。 将RocketMQSpringboot整合起来,可以快速构建一个分布式的消息系统,实现异步消息传递、解耦等功能。下面是一个简单的RocketMQSpringboot整合的步骤: 1. 引入RocketMQ的依赖 在Springboot的pom.xml文件中引入RocketMQ的依赖: ``` <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.5.2</version> </dependency> ``` 2. 配置RocketMQ的连接信息 在Springboot的application.properties文件中配置RocketMQ的连接信息: ``` rocketmq.namesrvAddr=127.0.0.1:9876 rocketmq.producer.group=myGroup ``` 3. 创建消息生产者 在Springboot中创建一个RocketMQ的消息生产者,用于发送消息: ``` @Component public class RocketMQProducer { @Value("${rocketmq.producer.group}") private String producerGroup; private DefaultMQProducer producer; @PostConstruct public void init() throws MQClientException { producer = new DefaultMQProducer(producerGroup); producer.setNamesrvAddr(namesrvAddr); producer.start(); } @PreDestroy public void destroy() { producer.shutdown(); } public void send(String topic, String message) throws MQClientException, RemotingException, InterruptedException, MQBrokerException { Message msg = new Message(topic, message.getBytes(StandardCharsets.UTF_8)); SendResult result = producer.send(msg); System.out.printf("Message sent: %s%n", result); } } ``` 4. 创建消息消费者 在Springboot中创建一个RocketMQ的消息消费者,用于接收消息: ``` @Component public class RocketMQConsumer { @Value("${rocketmq.namesrvAddr}") private String namesrvAddr; private DefaultMQPushConsumer consumer; @PostConstruct public void init() throws MQClientException { consumer = new DefaultMQPushConsumer("myGroup"); consumer.setNamesrvAddr(namesrvAddr); consumer.subscribe("myTopic", "*"); consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { for (MessageExt msg : msgs) { System.out.printf("Message received: %s%n", new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); } @PreDestroy public void destroy() { consumer.shutdown(); } } ``` 5. 发送和接收消息 在Springboot中使用RocketMQProducer发送消息: ``` @Autowired private RocketMQProducer producer; public void sendMessage() throws Exception { producer.send("myTopic", "Hello, RocketMQ!"); } ``` 在Springboot中使用RocketMQConsumer接收消息: ``` @Autowired private RocketMQConsumer consumer; ``` 至此,RocketMQSpringboot整合完成。通过上述步骤,可以实现在Springboot中使用RocketMQ发送和接收消息的功能。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

商朝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值