java - 在我没有回复消息之前,我们如何才能在 Java rabbitmq 的队列中接收不到新消息?
问题描述
使用 java 从 RabbitMQ 中的队列接收单个消息:
我是 RabbitMQ 的新手,想知道我正在考虑的这个问题的好方法。我想创建一个订阅队列并只接收一条消息并在处理后接收下一条消息的服务。
DeliverCallback deliverCallback = new DeliverCallback() {
public void handle(String s, Delivery delivery) throws IOException {
System.out.println("Tag: "+delivery.getEnvelope().getDeliveryTag());
String message = new String(delivery.getBody(), "UTF-8");
}
};
channel.basicConsume(QUEUE_NAME, false, deliverCallback, new CancelCallback() {
public void handle(String consumerTag) throws IOException {}
});
解决方案
为了从队列中接收一条消息,我执行了以下步骤:
第 1 步:一次只接受一条未确认的消息:
channel.basicQos(1);
第 2 步:将 autoAck 设置为 false:
boolean autoAck = false;
第 3 步:使用 Java 客户端的工作队列
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
try {
System.out.println("Tag: "+delivery.getEnvelope().getDeliveryTag());
String message = new String(delivery.getBody(), "UTF-8");
} finally {
System.out.println(" [Message] Task Done");
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
};
channel.basicConsume(QUEUE_NAME, autoAck, deliverCallback, consumerTag -> { });
参见:rabbitmq 文档
推荐阅读
- php - 如何从 json (php) 中获取正确的值?
- reactjs - 为什么当我只单击表格中的一行时,antd-react 的 rowselect 会选择所有行?
- python - 在某个特定时间启动 Python 文件中的代码的 Python 代码
- ios - 在 iOS 游戏中禁用 iOS 可达性滑动手势
- typescript - 打字稿,定义对象是数组中所有类型的乘积
- google-home - 谷歌主页布局控制工作但没有语音命令
- javascript - 无法从 nodejs 连接到 SQL 数据库
- python - Python map() 函数 - ValueError:无法将字符串转换为浮点数
- javascript - 如何从数组中生成随机数量的项目
- python - Python递归将元组列表排序为树结构