springboot链接两个ActiveMq(多个)

springboot链接两个ActiveMq(多个)

1.修改yml文件

建议:最好把原来的配置去了 。


spring:
#  activemq:
#    broker-url: tcp://127.0.0.1:61616
#    user: admin
#    password: admin
#  jms:
    #true:topic模式,false:queue模式
#    pub-sub-domain: true

activemq:
  one:
    brokerUrl: tcp://127.0.0.1:61616
    user: admin
    password: admin
    #true:topic模式,false:queue模式
    pub-sub-domain: true
  two:
    brokerUrl: tcp://127.0.0.2:61616
    user: admin
    password: admin
    #true:topic模式,false:queue模式
    pub-sub-domain: true
#接收不同mq时用到    
msgListener:
  oneMqName: one
  twoMqName: two

2.关键 添加配置类

package com.wys.config;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
import org.springframework.jms.core.JmsTemplate;
/**
 * @program: service
 * @description activemq 配置类
 * @author: wys
 * @create: 2020-06-03 
 **/
@Configuration
public class ActiveMqConfigs {
    /**
     * one mq 地址 账户密码注入
     * @param brokerUrl
     * @param username
     * @param password
     * @return
     */
    @Bean(name = "oneConnectionFactory")
    @Primary
    public ActiveMQConnectionFactory oneConnectionFactory(
            @Value("${activemq.one.brokerUrl}") String brokerUrl,
            @Value("${activemq.one.user}") String username,
            @Value("${activemq.one.password}") String password) {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
        factory.setBrokerURL(brokerUrl);
        factory.setUserName(username);
        factory.setPassword(password);
        return factory;
    }

    /**
     * one JmsTemplate生成
     * @param connectionFactory
     * @param pubSubDmain
     * @return
     */
    @Bean(name = "oneJmsTemplate")
    @Primary
    public JmsTemplate oneJmsTemplate(
            @Qualifier("oneConnectionFactory") ActiveMQConnectionFactory connectionFactory,
            @Value("${activemq.one.pub-sub-domain}") boolean pubSubDmain) {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        jmsTemplate.setPubSubDomain(pubSubDmain);
        return jmsTemplate;
    }

    /**
     * one JmsListener工厂生成
     * @param connectionFactory
     * @param pubSubDmain
     * @return
     */
    @Bean(name = "oneJmsListenerContainerFactory")
    @Primary
    public JmsListenerContainerFactory oneJmsListenerContainerFactory(
            @Qualifier("oneConnectionFactory") ActiveMQConnectionFactory connectionFactory,
            @Value("${activemq.one.pub-sub-domain}") boolean pubSubDmain) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(pubSubDmain);
        return factory;
    }

    

    /**
     * two mq 地址 账号密码注入
     * @param brokerUrl
     * @param username
     * @param password
     * @return
     */
    @Bean(name = "twoConnectionFactory")
    public ActiveMQConnectionFactory twoConnectionFactory(
            @Value("${activemq.two.brokerUrl}") String brokerUrl,
            @Value("${activemq.two.user}") String username,
            @Value("${activemq.two.password}") String password) {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
        factory.setBrokerURL(brokerUrl);
        factory.setUserName(username);
        factory.setPassword(password);
        return factory;
    }

    /**
     * two JmsTemplate生成
     * @param connectionFactory
     * @param pubSubDmain
     * @return
     */
    @Bean(name = "twoJmsTemplate")
    public JmsTemplate twoJmsTemplate(
            @Qualifier("twoConnectionFactory") ActiveMQConnectionFactory connectionFactory,
            @Value("${activemq.two.pub-sub-domain}") boolean pubSubDmain) {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        jmsTemplate.setPubSubDomain(pubSubDmain);
        return jmsTemplate;
    }

    /**
     * two JmsListener工厂生成
     * @param connectionFactory
     * @param pubSubDmain
     * @return
     */
    @Bean(name = "twoJmsListenerContainerFactory")
    public JmsListenerContainerFactory twoJmsListenerContainerFactory(
            @Qualifier("twoConnectionFactory") ActiveMQConnectionFactory connectionFactory,
            @Value("${activemq.two.pub-sub-domain}") boolean pubSubDmain) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setPubSubDomain(pubSubDmain);
        return factory;
    }
}

3.调用JmsTemplate发送mq

只要在注入对象前加@Qualifier注解就可以了,当然也可以用 @Resource注解。
jmsTemplate.convertAndSend方法的第一个参数是要发送的mq名称,第二个参数是mq的内容。

 private Logger log = LoggerFactory.getLogger(this.getClass());
    @Autowired
    @Qualifier("oneJmsTemplate")//或twoJmsTemplate
    private JmsTemplate jmsTemplate;

   /**
     * 查询发送测试
     *
     */
    public void sendMq() {
        try {
            jmsTemplate.convertAndSend("mqName","content");
        } catch (Exception e) {
            log.error("SendMsgController.sendMq()", e);
        }
    }

4. 接收mq -@JmsListener注解添加containerFactory配置

 /**
     * 接收one mq方法
     *
     * @param message
     */
    @JmsListener(destination = "${msgListener.oneMqName}" ,containerFactory = "oneJmsListenerContainerFactory")
    public void receiveQueueOne(String message) {
        if (StringUtils.isEmpty(message)) {
            return;
        }
       // todo 

    }
    /**
     * 接收two mq方法
     *
     * @param message
     */
    @JmsListener(destination = "${msgListener.twoMqName}" ,containerFactory = "twoJmsListenerContainerFactory")
    public void receiveQueueTwo(String message) {
        if (StringUtils.isEmpty(message)) {
            return;
        }
      // todo 

    }

如果接收相同ip相同queues或topics的队列,就不用增加配置,直接调用即可. 如和one的ip相同,直接复制receiveQueueOne方法,修改方法名和注解上的destination配置即可,containerFactory配置不用修改。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wuyuanshun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值