我不认为在servlet中使用while(true)可能是一个好主意,所以我想知道我是否应该使用Servlet With Thread或者我有其他替代方法。
@Override
public void doWork(Channel channel, QueueingConsumer queueingConsumer)
throws Exception {
while (true) {
QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
BasicProperties props = delivery.getProperties();
BasicProperties replyProps = new BasicProperties.Builder().correlationId(props.getCorrelationId()).build();
byte[] response = null;
try {
String message = ObjectCodec.deSerialize(delivery.getBody()).toString();
response = process(message);
} catch (Exception e) {
LogUtils.logError("CMDBDeleteQueue process data fail.", e);
} finally {
channel.basicPublish("", props.getReplyTo(), replyProps,response);
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
}
}
没有其他办法,请勿申请时(真)?感谢。
答案 0 :(得分:0)
servlet和RabbitMQ使用者都可以是RPC服务器。在伪代码中,
使用RabbitMQ:
while isConsuming
var message = wait message
handler.handleAsync(message)
使用Servlets:
void doGet()
var message = request.getContent()
handler.handleAsync(message)
使用RabbitMQ的RPC客户端:
var message = new()
publisher.send(message)
使用Servlet的RPC的客户端:
var httpRequest = new()
httpRequest.setContent()
httpRequest.send()
答案 1 :(得分:0)
鉴于你的表面知识,你应该认真考虑看看像spring-amqp这样的东西,这将有助于消耗队列所需的必要资源和线程池管理,这实际上是非常重要的,特别是如果你要做RPC。 / p>