java - Spring JMS 定义多个目的地
问题描述
弹簧文档说:
目的地,作为 ConnectionFactory 实例,是您可以在 JNDI 中存储和检索的 JMS 管理对象。配置 Spring 应用程序上下文时,您可以使用 JNDI JndiObjectFactoryBean 工厂类或对对象对 JMS 目标的引用执行依赖注入。
但是,如果应用程序中有大量目的地,或者如果 JMS 提供程序具有独特的高级目的地管理功能,则此策略通常很麻烦。
问题是:
当我的申请中有大量目的地时如何进行?
使用上面提到的策略,我必须定义:
- Jndi模板
- JndiDestinationResolver
- JndiObjectFactoryBean
- 缓存连接工厂
- Jms模板
对于每个目的地。
所以如果我有 20 个队列,我将不得不定义 100 个这样的 bean...
解决方案
您可以只使用一个JmsTemplate
,CachingConnectionFactory
和JndiDestinationResolver
...
使用 a 的全部DestinationResolver
目的是懒惰地为您解析目的地。使用特定的send
或 [ convertAndSend][5]. The
destinationName will be passed on to the
DestinationResolver` 来获取目的地。
唯一的缺点是您需要使用 jndi-name 作为destinationName。
@Bean
public JndiDestinationResolver jndiDestinationResolver() {
return new JndiDestinationResolver();
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setDestinationResolver(jndiDestinationResolver());
jmsTemplate.setConnectionFactory(connectionFactory());
return jmsTemplate;
}
有了这个,您可以使用以下内容从 JNDI 动态解析目标。
jmsTemplate.send("jms/queue1", "This is a message");
jmsTemplate.send("jms/queue3", "This is another message");
推荐阅读
- sql - 如何将不同的数据放入一个单元格
- javascript - Reactjs中如何通过onClick扩展div元素
- flutter - 默认构造函数已经定义。我正在使用颤振
- sqlite - 在 SQLite 数据库中预加载数据的 Xamarin 表单
- javascript - 创建一个函数以在 Javascript 中按对象的值对对象数组进行排序
- node.js - 节点usb打印机
- android - 将 ArrayList 的 ArrayList 传递给另一个类
- javascript - 试图让个人网站配色方案与 Flux 色温相匹配
- webapi - Persona U 是 U 4500 Web API
- api-platform.com - 使用 API 平台自定义 REST 操作的最佳实践