Java连接多个mq,springboot整合mq(多个队列)

本文介绍了如何在SpringBoot应用中整合ActiveMQ以连接并处理多个消息队列。首先,添加了activemq依赖并配置了YML文件。接着,创建了配置类`ActiveMQConfig`,包括`JmsListenerContainerFactory`和`ActiveMQConnectionFactory`,设置了重试策略和并发消费者数量。然后,定义了两个队列`telQueue`和`emailQueue`。最后,创建了消息发送者`QueueSender`和接收者`QueueReceiver`,分别用于发送和监听不同队列的消息。

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

1.添加mq的依赖,这里使用的是activemq

org.springframework.boot

spring-boot-starter-activemq

2.配置yml

spring.activemq.broker-url=tcp://172.16.154.27:61616

spring.activemq.user=admin

spring.activemq.password=123456

spring.activemq.in-memory=true

spring.activemq.pooled=false

3.添加配置文件整合mq

@Configuration

public class ActiveMQConfig {

@Bean

public JmsListenerContainerFactory> queueListenerFactory(@Qualifier("activeMQConnectionFactory") ActiveMQConnectionFactory connectionFactory) {

DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();

SimpleMessageListenerContainer container=new SimpleMessageListenerContainer();

container.setConcurrentConsumers(3);

container.setConnectionFactory(connectionFactory);

factory.setPubSubDomain(false);

factory.setConnectionFactory(connectionFactory);

factory.setConcurrency("3-15"); //连接数

factory.setRecoveryInterval(1000L); //重连间隔时间

factory.setSessionAcknowledgeMode(4);

return factory;

}

@Bean

public ActiveMQConnectionFactory activeMQConnectionFactory(){

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();

connectionFactory.setTrustAllPackages(true);

connectionFactory.setRedeliveryPolicy(redeliveryPolicy());

return connectionFactory;

}

@Bean

public RedeliveryPolicy redeliveryPolicy(){

RedeliveryPolicy redeliveryPolicy=new RedeliveryPolicy();

//是否在每次尝试重新发送失败后,增长这个等待时间

redeliveryPolicy.setUseExponentialBackOff(true);

//重发次数,默认为6次

redeliveryPolicy.setMaximumRedeliveries(5);

//重发时间间隔,默认为1秒

redeliveryPolicy.setInitialRedeliveryDelay(1);

//第一次失败后重新发送之前等待500毫秒,第二次失败再等待500 * 2毫秒,这里的2就是value

redeliveryPolicy.setBackOffMultiplier(2);

//是否避免消息碰撞

redeliveryPolicy.setUseCollisionAvoidance(false);

//设置重发最大拖延时间-1 表示没有拖延只有UseExponentialBackOff(true)为true时生效

redeliveryPolicy.setMaximumRedeliveryDelay(-1);

return redeliveryPolicy;

}

@Bean

public JmsTemplate jmsTemplate(ActiveMQConnectionFactory activeMQConnectionFactory){

JmsTemplate jmsTemplate=new JmsTemplate();

jmsTemplate.setDeliveryMode(1);//进行持久化配置 1表示非持久化,2表示持久化

jmsTemplate.setConnectionFactory(activeMQConnectionFactory);

jmsTemplate.setSessionAcknowledgeMode(4);//客户端签收模式

return jmsTemplate;

}

}

4.定义queue

@Configuration

public class QueueConfig {

@Bean(name="telQueue")

public Queue telQueue() {

return new ActiveMQQueue(MESSAGE_TEL);

}

@Bean(name = "emailQueue")

public Queue emailQueue() {

return new ActiveMQQueue(MESSAGE_EMAIL);

}

}

5.定义生成者和消费者

@Slf4j

@Component

public class QueueSender {

@Autowired

private JmsMessagingTemplate jmsMessagingTemplate;

@Resource(name = "telQueue")

private Queue telQueue;

@Resource(name = "emailQueue")

private Queue emailQueue;

public void sendTel(final MessageTel message){

log.info("发送短信message={}",message);

this.jmsMessagingTemplate.convertAndSend(telQueue,message);

}

public void sendEmail(final MessageEMail message){

log.info("发送email message={}",message);

this.jmsMessagingTemplate.convertAndSend(emailQueue,message);

}

}

@Slf4j

@Component

public class QueueReceiver {

@Autowired

private MailUtil mailUtil;

@Autowired

private SendSMSUtil sendSMSUtil;

/**

* 发送短信

*

* @param messageTel

*/

@JmsListener(destination = QueueConfig.MESSAGE_TEL, containerFactory = "queueListenerFactory")

public void receiveTel1(MessageTel messageTel) {

log.info("-----receive tel message-----");

}

/**

* 发送邮件

*

* @param messageEMail

*/

@JmsListener(destination = QueueConfig.MESSAGE_EMAIL, containerFactory = "queueListenerFactory")

public void receiveEmail(MessageEMail messageEMail) {

log.info("-----receive email message-----");

}

}

每启动一个监听,会实例化三个消费者。

在Spring Boot中整合IBM MQ并同时监听多个管道,可以使用IBM MQJava API和Spring Boot的消息监听器来实现。 1. 添加IBM MQJava API依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.ibm.mq</groupId> <artifactId>mq-jms-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> ``` 2. 配置IBM MQ连接信息 在application.properties文件中配置IBM MQ连接信息,如下所示: ``` ibm.mq.queueManager=QMGR ibm.mq.channel=CHANNEL ibm.mq.connName=HOSTNAME(PORT) ibm.mq.user=USERNAME ibm.mq.password=PASSWORD ``` 其中,QUEUE_MANAGER是IBM MQ队列管理器名称,CHANNEL是用于连接队列管理器的通道名称,CONN_NAME是IBM MQ的主机名和端口号,USER和PASSWORD是连接IBM MQ所需的凭据。 3. 配置消息监听器 在Spring Boot中,可以使用@JmsListener注解来创建消息监听器。为了同时监听多个管道,可以在注解中指定多个目标队列的名称,如下所示: ```java @JmsListener(destination = {"QUEUE1", "QUEUE2"}) public void onMessage(Message message) { // 处理消息 } ``` 4. 启动应用程序 最后,可以启动应用程序并开始监听多个管道上的消息。当有消息到达任何一个队列时,消息监听器都会被触发,并处理消息。 总结: 使用Spring Boot和IBM MQJava API,可以轻松地实现对多个管道的消息监听。只需添加IBM MQJava API依赖,配置连接信息和消息监听器,就可以在Spring Boot应用程序中同时监听多个管道上的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值