springboot监听两个不同源的Rocketmq

本文详细介绍了如何在SpringBoot项目中集成RocketMQ,包括添加依赖、配置消费者组和名称服务器,以及实现Acl认证和消息监听功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建一个springboot 项目

二、添加依赖

添加RocketMq依赖,根据需要选择对应的版本

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

三、添加配置文件

rocketmq:
  consumer:
    one:
      name-server: 127.0.0.1:9876
      topic: topic_one
      consumer-group:group_one
      access-key: accesskey
      secret-key: secretkey
    two:
      name-server: 10.104.215.132:9876
      topic: topic_two
      consumer-group: group_two

四、添加配置类及消息监听

Acl认证工具类
package com.tswdya.utils;

import org.apache.rocketmq.acl.common.AclClientRPCHook;
import org.apache.rocketmq.acl.common.SessionCredentials;



/**
 * @author taoshiwei
 */
public class AclClientRpcHookUtil {

    private static volatile AclClientRPCHook rpcHook = null;

    public static AclClientRPCHook getRpcHook(String accessKey,String secretKey){
        if (null == rpcHook) {
            synchronized (AclClientRPCHook.class){
                if (null == rpcHook) {
                    rpcHook = new AclClientRPCHook(new SessionCredentials(accessKey, secretKey));
                }
            }
        }
        return rpcHook;
    }
}

RocketMqConfig配置类

package com.tswdya.config;

import com.tswdya.utils.AclClientRpcHookUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.consumer.rebalance.AllocateMessageQueueAveragely;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * @author taoshiwei
 */
@Configuration
@Slf4j
public class RocketMqConfig {

    @Value("${rocketmq.consumer.one.name-server}")
    private String nameServerOne;
    @Value("${rocketmq.consumer.one.topic}")
    private String topicOne;
    @Value("${rocketmq.consumer.one.consumer-group}")
    private String consumerGroupOne;
    @Value("${rocketmq.consumer.one.access-key}")
    private String accessKey;
    @Value("${rocketmq.consumer.one.secret-key}")
    private String secretKey;
    
    @Value("${rocketmq.consumer.two.name-server}")
    private String nameServerTwo;
    @Value("${rocketmq.consumer.two.topic}")
    private String topicTwo;
    @Value("${rocketmq.consumer.two.consumer-group}")
    private String consumerGroupTwo;

    @Bean(name = "consumer1",initMethod = "start", destroyMethod = "shutdown")
    public DefaultMQPushConsumer consumer1() throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupOne, AclClientRpcHookUtil.getRpcHook(accessKey, secretKey), new AllocateMessageQueueAveragely());
        consumer.setNamesrvAddr(nameServerOne);
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.subscribe(topicOne, "*");
        consumer.setInstanceName("consumer1-instance");
        consumer.registerMessageListener(new MessageListenerConcurrently(){
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                log.info(Thread.currentThread().getName()
                        + "consumer1 Receive New Messages: {}" + list);
                for (MessageExt msg : list) {
                    // 业务实现
                    log.info("consumer1 消费消息:{}" ,new String(msg.getBody()));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        log.info("consumer1 started");
        return consumer;
    }

    @Bean(name = "consumer2",initMethod = "start", destroyMethod = "shutdown")
    public DefaultMQPushConsumer consumer2() throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroupTwo);
        consumer.setNamesrvAddr(nameServerTwo);
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.subscribe(topicTwo, "*");
        consumer.setInstanceName("consumer2-instance");
        consumer.registerMessageListener(new MessageListenerConcurrently(){
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
                log.info(Thread.currentThread().getName()
                        + "consumer2 Receive New Messages: {}" + list);
                for (MessageExt msg : list) {
                    // 业务实现
                    log.info("consumer2 消费消息:{}" ,new String(msg.getBody()));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        log.info("consumer2 started");
        // 设置消息监听器等其他配置...
        return consumer;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值