Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-jms-messageId分隔符_Java_Spring_Jms_Ibm Mq_Spring Jms - Fatal编程技术网

Java Spring-jms-messageId分隔符

Java Spring-jms-messageId分隔符,java,spring,jms,ibm-mq,spring-jms,Java,Spring,Jms,Ibm Mq,Spring Jms,我正在使用@JmsListener注释从队列接收所有消息 @JmsListener(destination = MyQueue, selector = "MAINST = '" + instanceName + "'") public void receivMsg(Message message) { 但是另一个系统不能处理消息属性。它以相关id响应。我如何通过CorrelationID过滤消息,当在LinkedList中存在时,您可以使用该标头属性的名称通过JMS相关

我正在使用
@JmsListener
注释从队列接收所有消息

@JmsListener(destination = MyQueue, selector = "MAINST = '" + instanceName + "'")
            public void receivMsg(Message message) {

但是另一个系统不能处理消息属性。它以相关id响应。我如何通过CorrelationID过滤消息,当在
LinkedList

中存在时,您可以使用该标头属性的名称通过JMS相关id进行选择:

selector = "JMSCorrelationID = '" + something + "'"

同时签出消息API的消息选择器部分:

instanceName
使用属性占位符。下面是一个在同一队列上有两个侦听器的示例

@SpringBootApplication
public class So48377178Application {

    public static void main(String[] args) {
        SpringApplication.run(So48377178Application.class, args);
    }

    @Bean
    public ApplicationRunner runner(JmsTemplate template) {
        return args -> {
            template.convertAndSend("foo", "This one's for A", m -> {
                m.setJMSCorrelationID("A");
                return m;
            });
            template.convertAndSend("foo", "This one's for B", m -> {
                m.setJMSCorrelationID("B");
                return m;
            });
        };
    }

    @JmsListener(destination = "foo", selector = "JMSCorrelationID='${a.instance}'")
    public void listenA(Message message) {
        System.out.println("A: " + message);
    }

    @JmsListener(destination = "foo", selector = "JMSCorrelationID='${b.instance}'")
    public void listenB(Message message) {
        System.out.println("B: " + message);
    }

}


它不起作用。因为“某物”必须是字符串constantAh,好的,是的。订户和相关ID是一个相当重的对象。不需要为每条消息(或相关ID)创建一个。如果不需要的话,你就不能把它们扔掉吗?类似于:if(!msg.getJMSCorrelationID().equals(Something))返回;因为另一个应用程序也侦听此队列。使用主题如何?
a.instance=A
b.instance=B
B: ActiveMQTextMessage {commandId = 5, responseRequired = true, messageId = ID:gollum.local-56240-1516631774140-4:4:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:gollum.local-56240-1516631774140-4:4:1:1, destination = queue://foo, transactionId = null, expiration = 0, timestamp = 1516631774348, arrival = 0, brokerInTime = 1516631774348, brokerOutTime = 1516631774349, correlationId = B, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 1056, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false, text = This one's for B}
A: ActiveMQTextMessage {commandId = 5, responseRequired = true, messageId = ID:gollum.local-56240-1516631774140-4:3:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:gollum.local-56240-1516631774140-4:3:1:1, destination = queue://foo, transactionId = null, expiration = 0, timestamp = 1516631774341, arrival = 0, brokerInTime = 1516631774341, brokerOutTime = 1516631774345, correlationId = A, replyTo = null, persistent = true, type = null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 1056, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false, text = This one's for A}