java - 将 Postman 请求转换为 RabbitMQ
问题描述
我有一个 POST 请求,我在 Postman 中使用它来更改设备的状态,当我直接通过 Postman 发出请求时,它似乎可以工作,但我无法使其与 RabbitMQ 一起工作。
这是我的邮递员:
http://fakesite:123/api/exchanges/%2F/SOCKET_PROXY_EXCHANGE/publish
{
"vhost": "/",
"name": "SOCKET_PROXY_EXCHANGE",
"properties": {
"delivery_mode": 1,
"headers": {}
},
"routing_key":"fakeid.test",
"delivery_mode": "1",
"payload": "{\"id\":\"fakeid\",\"status\":\"ON\"}",
"headers": {},
"props": {},
"payload_encoding": "string"
}
这是我的 RabbitMQ 请求
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(fakesite);
factory.setUsername(fakeusr);
factory.setPassword(fakepass);
factory.setVirtualHost("/");
factory.setPort(123);
String routingKey = "fakeid.test";
String testQ = "testQ" + routingKey;
String payload = "{\"id\":\"fakeid\",\"status\":\"ON\"}";
try {
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
HashMap<String, Object> customProperties = new HashMap<>();
customProperties.put("content_type", "text/plain");
channel.queueDeclare(testQ, false, false, false, null);
channel.basicPublish("SOCKET_PROXY_EXCHANGE", testQ, null, payload.getBytes());
channel.queueDelete(testQ);
channel.close();
connection.close();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
关于为什么不起作用的任何想法,我对 RabbitMQ 真的很陌生,我看不出我是否犯了错误。
解决方案
您的路由键变量是 routingKey= fakeid.test 并且队列变量是 testQ= testQfakeid.test
方法语法,
void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
你正在使用
channel.basicPublish("SOCKET_PROXY_EXCHANGE", testQ, null, payload.getBytes());
它应该是
channel.basicPublish("SOCKET_PROXY_EXCHANGE", routingKey, null, payload.getBytes());
路由键,而不是队列。
当我们发布时,我们只需要路由键和交换名称,根据我们与该交换绑定的内容,它将根据交换类型路由到该队列
RabbitMQ 队列、交换和它们之间的绑定可以通过使用Rabbitmq 管理控制台 或代码来完成。
如何通过代码创建队列、交换和绑定它们,
String exchangeName= "SOCKET_PROXY_EXCHANGE";
channel.queueDeclare(testQ, false, false, false, null);
channel.exchangeDeclare(exchangeName, "direct", true);
channel.queueBind(testQ, exchangeName, routingKey);
channel.basicPublish(exchangeName, routingKey, null, payload.getBytes());
// channel.queueDelete(testQ);
channel.close();
您可以从他们的文档中引用 RabbitMQ Exchange、Queue 和它们之间的绑定、Exchange 类型。
推荐阅读
- reactjs - 使用 setFieldValue Ant 设计设置字段值
- debugging - PySpark:如何修复“function”对象没有属性“rand”错误?
- java - 如何从不同设备上的 Wifi 获取 RSSI 值?
- nullpointerexception - Install4j Execution 仅在 windows 中抛出空指针异常
- ruby-on-rails - 在 Prawn PDF 中使用带有 :Desc 选项的 link_annotation
- android - ViewPager2 的 OnTouchListener
- php - PHP过滤器选择选项
- r - 使用 R 进行 Webscraping:如何整理我的数据?
- android - 如何在 rxjava 中加入多个可观察对象
- python-3.x - 如何按出现顺序对列表进行排序并将相同的元素聚集在一起?