java - 有没有办法异步使用来自 RabbitMQ 主题的消息?
问题描述
我正在尝试向RabbitMQ
主题发送消息,然后运行接收消息的类。但我不知道为什么,我的消费者只同步接收消息。我看到了一些关于如何使用队列执行此操作的示例,但是对于一个主题,它似乎有点不同。谁能告诉我我做错了什么?
这是我的课程:
public class ReceiveLogsTopic {
private static final String EXCHANGE_NAME = "topic_logs";
private static String message;
public static void main(String[] args) throws Exception {
String message = getMessage("#");
System.out.println(message);
}
public static String getMessage(String argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, EXCHANGE_NAME, argv);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + delivery.getEnvelope().getRoutingKey() + "':'" + message + "'");
};
channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {
});
EmitLogTopic.sendMessage();
connection.close();
return message;
}
}
.
public class EmitLogTopic {
private static final String EXCHANGE_NAME = "topic_logs";
public static String sendMessage() throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.exchangeDeclare(EXCHANGE_NAME, "topic");
String routingKey = getRouting();
String message = getMessage();
channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + routingKey + "':'" + message + "'");
return message;
}
}
private static String getRouting() {
return "anonymous.info";
}
private static String getMessage() {
return "Hello World!";
}
}
解决方案
推荐阅读
- java - 在从 Firebase 检索的导航抽屉中设置文本
- flutter - 颤振应用程序/vnd.android.package-archive 解析错误
- android - 如何从android studio中的firebase存储中获取所有图像?
- informix - 在 Informix 中跳过特定用户的触发器
- c# - C# 可以在操作数右侧使用 Func<> 重载运算符“>”吗?
- reactjs - 如何将动作列设置为材料ui表ReactJs中的最后一列?
- azure - 连接似乎不适用于 azure
- selenium - 如何跨会话重用驱动程序
- javascript - 生成随机 uuid Javascript
- angular - Mat Sort 标头不对数据进行排序