如何从同一应用程序向多个JMS(活动MQ)代理发送消息?

gstackoverflow

我在本地有2个具有嵌入式活动mq实例的应用程序(服务器)。

现在,我需要为此服务器创建一个客户端。

我已经阅读过答案:https ://stackoverflow.com/a/43401330/2674303

并尝试重复此操作:

我注册了2个连接工厂:

@Bean
@Primary
public ConnectionFactory bitFinexExchangeJmsConnectionFactory() {
    return new ActiveMQConnectionFactory("tcp://localhost:61616");
}

@Bean
public ConnectionFactory hitbtcExchangeJmsConnectionFactory() {
    return new ActiveMQConnectionFactory("tcp://localhost:61617");
}

注册了2个jms模板:

@Bean
@Primary
public JmsTemplate bitfinexJmsTemplate() {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(bitFinexExchangeJmsConnectionFactory());
    jmsTemplate.setDefaultDestinationName("robotCommand_bitfinex");
    return jmsTemplate;
}

@Bean
public JmsTemplate hitBtcJmsTemplate() {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(hitbtcExchangeJmsConnectionFactory());
    jmsTemplate.setDefaultDestinationName("robotCommand_hitbtc");
    return jmsTemplate;
}

并在我的spring boot应用程序中编写了以下main方法:

ConfigurableApplicationContext context = SpringApplication.run(RobotApplication.class, args);
JmsTemplate bitfinexJmsTemplate = context.getBean(JmsTemplate.class, "bitfinexJmsTemplate");
bitfinexJmsTemplate.convertAndSend("robotCommand", "message to bitfinex");

JmsTemplate hitBtcJmsTemplate = context.getBean(JmsTemplate.class, "hitBtcJmsTemplate");
hitBtcJmsTemplate.convertAndSend("robotCommand", "message to hitbtcc");

在客户中,我看到只有message to bitfinex交货。

我开始调查问题,并找出了hitBtcJmsTemplate用途bitFinexExchangeJmsConnectionFactory我试图更改我的主要方法代码:

ConfigurableApplicationContext context = SpringApplication.run(RobotApplication.class, args);
JmsTemplate bitfinexJmsTemplate = context.getBean(JmsTemplate.class, "bitfinexJmsTemplate");
bitfinexJmsTemplate.convertAndSend("robotCommand", "message to bitfinex");

JmsTemplate hitBtcJmsTemplate = context.getBean(JmsTemplate.class, "hitBtcJmsTemplate");
hitBtcJmsTemplate.setConnectionFactory((ConnectionFactory) context.getBean("hitbtcExchangeJmsConnectionFactory")); //  <---- additional line
hitBtcJmsTemplate.convertAndSend("robotCommand", "message to hitbtcc");

并且两个服务器都收到了消息。

因此很明显我的配置是错误的。请帮助纠正它。

哈森·本努尔

您使用了错误的getBean方法!

<T> T getBean(java.lang.Class<T> requiredType,
              java.lang.Object... args)

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html#getBean-java.lang.Class-java.lang.Object ... --

改成

JmsTemplate bitfinexJmsTemplate = context.getBean("bitfinexJmsTemplate", JmsTemplate.class);

JmsTemplate hitBtcJmsTemplate = context.getBean("hitBtcJmsTemplate", JmsTemplate.class);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Glassfish服务器上部署同一应用程序的多个副本?

库中同一应用程序的多个共享选项

Spring JMS在同一应用程序中使用点对点和主题

Android-Lollipop屏幕固定功能可在同一应用程序中跨多个活动使用吗?

netlogo:向除一个代理外的所有代理发送消息

同一应用程序下具有多个环境的Terraform和Elastic Beanstalk

同一应用程序上的多个TIdCmdTCPServers

远程更新同一应用程序的多个网站和数据库

具有相同组ID Kafka的同一应用程序的多个实例

通过同一应用程序的多个kafka流实例读取规则集主题/分区

如何在git中同时使用同一应用程序的多个版本?

在同一应用程序中启动多个scotty服务器的最优雅方法是?

同一应用程序无法通过Docker Compose发送HTTP请求

Firebase:将同一应用程序部署到多个Firebase项目

如何使Selenium始终与同一应用程序打开应用程序超链接?

捕获活动的窗口开关(也在同一应用程序中,例如Chrome标签)

如何使用“更新替代”来管理同一应用程序的多个已安装版本

Liquibase可以处理由同一应用程序管理的多个模式吗?

使用.NET多线程运行同一应用程序的多个实例

Android:如何通过同一应用向其他用户发送推送通知?

如何通过任务栏从同一应用程序快速关闭多个窗口?

使用dbus控制同一应用程序的多个实例?

是否可以在TestFlight上具有同一应用程序的多个版本?

如何获取从同一应用程序生成的所有Windows消息?

同一应用程序服务器的多个实例导致2个问题

如何让同一应用程序的多个版本使用相同版本的程序集?C#

<receiver> 类未注册从同一应用程序发送的隐式意图?

如何在 node.js 中禁止同一应用程序的多个实例?

从应用程序向 Cloudwatch 代理发送自定义指标数据