Java Spring RabbitMq使用者

时间:2015-10-21 11:28:51

标签: rabbitmq spring-amqp spring-rabbit

我正在尝试在Java Spring框架中创建一个RabbitMq使用者。我需要实现RabbitMq RPC模型,所以基本上消费者应该从RabbitMq代理接收一些消息,处理它,并将其发送回相关的回复队列。

有人可以给我一个简洁的示例代码,在Spring中实现这个要求吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

考虑使用Spring AMQP Project

请参阅documentation about async consumers。您只需要实现POJO方法并使用MessageListenerAdapter(在使用XML配置时默认插入) - 如果您的POJO方法返回结果,框架将自动将回复发送到入站消息中的replyTo ,可以是简单的队列名称,也可以是exchange/routingKey

<rabbit:listener-container connection-factory="rabbitConnectionFactory">
    <rabbit:listener queues="some.queue" ref="somePojo" method="handle"/>
</rabbit:listener-container>

public class SomePojo {
    public String handle(String in) {
        return in.toUpperCase();
    }
}

或者,您可以再次使用POJO中的注释@RabbitListener,请参阅the documentation

答案 1 :(得分:0)

谢谢Gary,它对我有用。我使用了@RabbitListener注释。

奇怪的是,它仅在我单独提供队列时才有效,但是指定交换,路由密钥和队列的绑定并不起作用。不知道这里有什么问题。

以下是python中的客户端代码段。

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='myQueue',durable='true')

channel.basic_publish(exchange='myExchange',
                      routing_key='rpc_queue',
                      body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()

这是春季消费者代码。

@RabbitListener(
        bindings = @QueueBinding(
        value = @Queue(value = "myQueue", durable = "true"),
        exchange = @Exchange(value = "myExchange"),
        key = "rpc_queue")
  )
  public void processOrder(Message message) {
        String messageBody= new String(message.getBody());
        System.out.println("Received : "+messageBody);
}

不确定此绑定是否出错。