java - JMSListener 选择器
问题描述
我有外部 JMS 生产者使用 header 属性向 ActiveMQ 发送消息domainSelector
。
当我试图在消费者身上过滤它时,我根本没有收到消息。当我禁用选择器时 - 它会带来所有域的所有消息(我不想要什么,我只需要我的域)
我在这里看到非常相似的问题,但从答案中我无法得出问题所在。它说,“一些位于生产者和消费者之间的组件,它应该只是转发消息。”
简化的外部生产者:
public abstract class BaseProducer {
protected JmsTemplate jmsTemplate;
....
public Object doInJms(Session session, MessageProducer messageProducer) throws JMSException {
// Create the message
Message message;
try {
message = session.createTextMessage(messageData.toJson());
} catch (JsonProcessingException e) {
....
}
.....
message.setStringProperty("domainSelector", "SERVICE");
}
messageProducer.send(message,
jmsTemplate.getDeliveryMode(),
priority,
jmsTemplate.getTimeToLive());
return message;
}
}
我的消费者:
我已经打印到日志头属性,并在日志中得到它:
收到 JMS domainSelector SERVICE
@JmsListener(destination = "#{campaignFullDestination}",
containerFactory = "jmsListenerContainerFactoryCampaign",
selector = "domainSelector = 'SERVICE'")
public void campaignListener(CampaignStatusChangeEvent campaignStatusChangeEvent, @Header("domainSelector") String domainSelector) {
logger.debug("received JMS message " + campaignStatusChangeEvent.toString());
logger.debug("received JMS domainSelector " + domainSelector);
otaCampaignFlowController.createCampaign(campaignStatusChangeEvent);
}
@Bean
public JmsTemplate jmsTemplate(MessageConverter messageConverter, ConnectionFactory connectionFactory){
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory);
template.setMessageConverter(messageConverter);
template.setPubSubDomain(true);
return template;
}
解决方案
推荐阅读
- jquery - 如何删除剃须刀 ASP.NET MVC 5 上的先前数据列表?
- r - 如何在R中创建按顺序聚类的变量?
- android - 使用改造动态设置 @GET 语句
- python - 反正有没有自动添加批量昏暗?
- docker - 如何在使用 gcloud 计算实例更新容器时设置日志驱动程序 gcplogs 或强制它使用默认驱动程序?
- python - TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“NoneType”错误
- r - 对 CRM Dynamics 365 中的 REST API 的 GET 请求
- python-3.x - 如何将字符串值插入到 pandas 0.24.2 的浮点列中?
- python - 如何从 Flask 服务器更改特定的 React 组件?
- node.js - 如何使用 Nginx 将节点应用程序连接到节点 API