JmsMessagingTemplate convertSendAndReceive临时队列错误

时间:2018-02-05 10:37:47

标签: spring-boot rabbitmq jms

使用Spring Boot 1.5.10.RELEASE,JMS spring-jms 5.0.3.RELEASE,rabbitmq-jms 1.8.1

@Autowired
JmsMessagingTemplate mTemplate;

@GetMapping("/jmstest")
public void sendRequest() {
    String request = new String("Req");
    String response = mTemplate.convertSendAndReceive("NameQ", request, String.class);
    System.out.println("Response : " + response);
}

@JmsListener(destination = "NameQ")
public void receiveName(String payload, Message msg, MessageHeaders headers) throws JMSException {
    System.out.println("Request : " + payload + " Headers : " + headers);
    String response = new String("Res");
    mTemplate.convertAndSend((Queue) headers.get("jms_replyTo"), response);
}

期待:

Request : Req Headers : {jms_redelivered=false, jms_deliveryMode=2, jms_replyTo=RMQDestination{destinationName='jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e', queue(temporary)', amqpExchangeName='jms.temp.queues', amqpRoutingKey='jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e', amqpQueueName='jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e'}, jms_destination=RMQDestination{destinationName='NameQ', queue(permanent)', amqpExchangeName='jms.durable.queues', amqpRoutingKey='NameQ', amqpQueueName='NameQ'}, jms_priority=4, id=3a44cff4-451b-f295-1449-24cdebe2a332, jms_timestamp=1517826611757, jms_expiration=0, jms_messageId=ID:1ff40ec6-e1e9-43e2-858e-2709763a8d0b, timestamp=1517826611861}
2018-02-05 16:00:11.945 ERROR 8864 --- [enerContainer-1] com.rabbitmq.jms.client.RMQSession       : RabbitMQ exception on queue declare name(jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e), durable(false), exclusive(true), auto-delete(false), properties(null)

java.io.IOException: null
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:120) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:952) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:333) ~[amqp-client-4.3.0.jar:4.3.0]
    ...
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:118) ~[spring-messaging-4.3.14.RELEASE.jar:4.3.14.RELEASE]
    at com.example.demo.service.RabbitQTest.receiveName(RabbitQTest.java:31) ~[bin/:na]
    ...
    at java.lang.Thread.run(Unknown Source) ~[na:1.8.0_141]
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e' in vhost '/', class-id=50, method-id=10)
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:443) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:263) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136) ~[amqp-client-4.3.0.jar:4.3.0]
    ... 35 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'jms-temp-queue-7d40b67f-809f-4672-aac5-9f313194815e' in vhost '/', class-id=50, method-id=10)
    at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:509) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:340) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:162) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:109) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) ~[amqp-client-4.3.0.jar:4.3.0]
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:581) ~[amqp-client-4.3.0.jar:4.3.0]
    ... 1 common frames omitted

使用隐式方法返回而不是void / convertSend时出现相同的错误 请帮助使用JMS,rabbitmq临时队列

实现请求/回复

0 个答案:

没有答案