我有一个简单的生产者和接收者类来处理rabbitmq
制片人:
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, EXCHANGE_NAME, "");
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope,
AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
channel.basicConsume(queueName, true, consumer);
}
接收者:
channel.sendAndReceiveMessage(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
问题是,生产者是否有可能知道接收者是否接受了消息。例如:
Observable.Transformer<T, T>
答案 0 :(得分:0)
简短的回答:您没有直接的方法让制作人知道消费者已经回复了该消息 长一: 您要在此处发送的第二个参数: channel.basicConsume(queueName,true,consumer); 是auto-ack,将其设置为false会强制你执行channel.basicAck(deliveryTag,false);确认收到消息(你可以从信封中获取交付标签)或Channel.basicNack告诉你输入的内容 这是什么意思?这意味着如果你不回复消息,它将返回队列并等待再次消耗,这样,你就可以确保消费所有消息。