Ibm mq 无法解析Spring JMS标头布尔值
我在SpringJMS侦听器版本5中有一个错误 我已将标题设置为布尔值。 我在IBM mq浏览器上检查了消息头,并且正确设置了值; 但是,当侦听器使用消息时,无法解析消息头。 这就是错误: MessageHandlingException:方法参数类型[class java.lang.Boolean]缺少标题“VERSION_MESSAGE” 这是听众Ibm mq 无法解析Spring JMS标头布尔值,ibm-mq,spring-jms,Ibm Mq,Spring Jms,我在SpringJMS侦听器版本5中有一个错误 我已将标题设置为布尔值。 我在IBM mq浏览器上检查了消息头,并且正确设置了值; 但是,当侦听器使用消息时,无法解析消息头。 这就是错误: MessageHandlingException:方法参数类型[class java.lang.Boolean]缺少标题“VERSION_MESSAGE” 这是听众 @JmsListener(destination = QUEUE_INTERNE, containerFactory = "Liste
@JmsListener(destination = QUEUE_INTERNE, containerFactory = "ListenerContainerFactory")
public void onMessageReceived(String message,
@Header (value = JmsHeaders.VERSION_MESSAGE) Boolean version)
下面是JmsHeaders的值。VERSION_消息是JmsHeaders
公共静态最终字符串VERSION\u MESSAGE=“VERSION\u MESSAGE”
我尝试了另一种方法,从侦听器中删除标题,如下所示:
@JmsListener(destination = QUEUE_INTERNE, containerFactory = "ListenerContainerFactory")
public void onMessageReceived(javax.jms.Message message)
boolean version=message.getBooleanProperty(JmsHeaders.VERSION_MESSAGE);
我没有错误,但是布尔值总是为false
额外信息,
侦听器容器被覆盖如下:
@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
BatchMessage batch = new BatchMessage(batchSize);
while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
return batch.getMessages().isEmpty() ? null : batch;
}
并且重写的方法始终返回false:
@Override
public boolean getBooleanProperty(String s) throws JMSException {
return false;
}
现在我明白了为什么我总是得到false,但是我怎样才能使它返回正确的值呢
谢谢我终于找到了问题的答案, 假设我的defaultListenerContainerFactory已被重写,并且当我们收到消息时,将执行此方法
@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
BatchMessage batch = new BatchMessage(batchSize);
while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
return batch.getMessages().isEmpty() ? null : batch;
}
因此,我们无法从侦听器访问标题,因为我们将消息包装在batchMessage中:
公共类BatchMessage实现消息{
private List<Message> messages = new ArrayList<>();
private int batchSize;
所有jmsheader和Jms数据都在消息内部意味着什么
因此,我必须仔细查看BatchMessage中的列表,以获取所有JMSAT属性和标题
下面是听众:
@JmsListener(destination = TARGETQUEUE, containerFactory = "BatchMessageListenerContainerFactory")
public void onMessageReception(Message message) throws StockageQueueListenerException {
try{
insererBatch((BatchMessage) message);
}
我终于找到了解决问题的办法, 假设我的defaultListenerContainerFactory已被重写,并且当我们收到消息时,将执行此方法
@Override
protected Message receiveMessage(MessageConsumer consumer) throws JMSException {
BatchMessage batch = new BatchMessage(batchSize);
while (!batch.releaseAfterMessage(super.receiveMessage(consumer))) ;
return batch.getMessages().isEmpty() ? null : batch;
}
因此,我们无法从侦听器访问标题,因为我们将消息包装在batchMessage中:
公共类BatchMessage实现消息{
private List<Message> messages = new ArrayList<>();
private int batchSize;
所有jmsheader和Jms数据都在消息内部意味着什么
因此,我必须仔细查看BatchMessage中的列表,以获取所有JMSAT属性和标题
下面是听众:
@JmsListener(destination = TARGETQUEUE, containerFactory = "BatchMessageListenerContainerFactory")
public void onMessageReception(Message message) throws StockageQueueListenerException {
try{
insererBatch((BatchMessage) message);
}