SpringBoot项目集成ArtemisMQ,那么想动态的更换消息类型,怎么办呢?
通过设置org.springframework.jms.support.destination.JmsDestinationAccessor#setDestinationResolver 方法进行设置目的地解析器
- 将之设置为 BeanFactoryDestinationResolver
- 默认提供的org.springframework.jms.support.destination.DynamicDestinationResolver 动态解析目的地实现类,只能在启动配置文件配置属性:spring.jms.pub-sub-domain = true/false ;全局使用的属性值
- 第三种方式就是重写 org.springframework.jms.support.destination.DynamicDestinationResolver 的解析提供的目的地名称的核心代码了,根据自己提供的名称的规则解析为指定的 队列或者订阅 模式
ArtemisMQ的性能调优章节,有一句
所以,需要自己进行缓存目标对象(例如,把目的地对象成为Bean单例组件)
其中著名一句话,是Spring Jms是反模式
如果要更改 JmsTemplate.destinationResolver属性,则指需在IOC容器中注册一个 DestinationResolver 接口的实现类即可