|
对于最新稳定版本,请使用Spring AMQP 4.0.0! |
民调消费者
这Amqp模板本身也可以用于轮询消息接待。
默认情况下,如果没有消息可用,零立即归还。
没有阻挡。
从1.5版本开始,你可以设置收到超时,在毫秒内,接收方法会阻塞最长达此时间,等待消息。
值小于零意味着无限期地块(至少直到与经纪商的连接中断)。
1.6 版本引入了收到允许每次调用传递超时的方式。
由于接收作会创建新的QueueingConsumer对于每条消息,这种技术并不适合高流量环境。
考虑使用异步消费者或收到超时在这些场景中,是零。 |
从2.4.8版本开始,使用非零超时时,你可以指定传递给basicConsume用于将消费者与频道关联的方法。
例如:template.addConsumerArg(“x-priority”,10).
有四种简单的收到方法可行。
与交换在发送端,有一种方法要求设置默认队列属性
直接在模板本身,并且有一个方法在运行时接受队列参数。
1.6版本引入了接受暂停 米利斯以覆盖收到超时按请求计算。
以下列表展示了这四种方法的定义:
Message receive() throws AmqpException;
Message receive(String queueName) throws AmqpException;
Message receive(long timeoutMillis) throws AmqpException;
Message receive(String queueName, long timeoutMillis) throws AmqpException;
就像发送消息的情况一样,Amqp模板有一些方便的方式来接收POJOs,而不是消息实例和实现提供了一种自定义消息转换器用于创建对象返回:
以下列表展示了这些方法:
Object receiveAndConvert() throws AmqpException;
Object receiveAndConvert(String queueName) throws AmqpException;
Object receiveAndConvert(long timeoutMillis) throws AmqpException;
Object receiveAndConvert(String queueName, long timeoutMillis) throws AmqpException;
从2.0版本开始,这些方法有变体需要额外的参数化类型引用变复类型参数。
模板必须配置为智能消息转换器.
看从消息跟兔子模板更多信息请见。
似发送与接收方法,从1.3版本开始,Amqp模板有多种便利接收并回复同步接收、处理和回复消息的方法。
以下列表展示了这些方法的定义:
<R, S> boolean receiveAndReply(ReceiveAndReplyCallback<R, S> callback)
throws AmqpException;
<R, S> boolean receiveAndReply(String queueName, ReceiveAndReplyCallback<R, S> callback)
throws AmqpException;
<R, S> boolean receiveAndReply(ReceiveAndReplyCallback<R, S> callback,
String replyExchange, String replyRoutingKey) throws AmqpException;
<R, S> boolean receiveAndReply(String queueName, ReceiveAndReplyCallback<R, S> callback,
String replyExchange, String replyRoutingKey) throws AmqpException;
<R, S> boolean receiveAndReply(ReceiveAndReplyCallback<R, S> callback,
ReplyToAddressCallback<S> replyToAddressCallback) throws AmqpException;
<R, S> boolean receiveAndReply(String queueName, ReceiveAndReplyCallback<R, S> callback,
ReplyToAddressCallback<S> replyToAddressCallback) throws AmqpException;
这Amqp模板实现会满足收到和答阶段。
在大多数情况下,你只需提供一个接收并回复回电对收到的消息执行一些业务逻辑,并在需要时构建回复对象或消息。
注,a接收并回复回电可能会回归零.
在这种情况下,没有回复,接收并回复工作方式类似于收到方法。
这使得同一队列可用于多种消息的混合,其中一些消息可能不需要回复。
只有当提供的回调不是 的实例时,才会应用自动消息(请求和回复)转换接收与回复消息回拨,提供原始消息交换合同。
这回复地址回电对于需要自定义逻辑来确定回复运行时对接收到的消息和回复进行地址接收并回复回电.
默认情况下,回复请求消息中的信息用于路由回复。
以下列表展示了基于POJO的接收和回复示例:
boolean received =
this.template.receiveAndReply(ROUTE, new ReceiveAndReplyCallback<Order, Invoice>() {
public Invoice handle(Order order) {
return processOrder(order);
}
});
if (received) {
log.info("We received an order!");
}