問題描述
我希望有人可以在這個問題上提供一些幫助.
I hope someone can provide some help on this matter.
我正在使用駱駝rabbitmq,出于測試目的,我試圖向隊列發(fā)送一條消息,我試圖在rabbitmq界面中顯示該消息,然后將其讀回.
I am using camel rabbitmq and for testing purpose I am trying to send a message to the queue, which I'm trying to display in rabbitmq interface and then also read it back.
但是我不能讓它工作.
我認(rèn)為可行的是,我在 rabbitmq 管理界面的交換選項卡中創(chuàng)建了一個新的交換.在我的 java 代碼中,我將消息發(fā)送到該交換.執(zhí)行代碼時,我可以在 Web 界面中看到一個峰值,表明已收到某些內(nèi)容,但我看不到已收到的內(nèi)容.當(dāng)我嘗試閱讀時,我無法閱讀并收到以下錯誤:<在路由中: Route(route2)[[From[rabbitmq://192.168.59.103:5672/rt... 因為 Route route2 沒有輸出處理器.您需要向路由添加輸出,例如 to("log:foo").
What I believe works is that I created, in the exchange tab of rabbitmq management interface, a new exchange. In my java code I send the message to that exchange. When the code is executed, I can see a spike in the web interface showing that something has been received but I can't see what has been received. When I try to read, I can't read and get the following errror: < in route: Route(route2)[[From[rabbitmq://192.168.59.103:5672/rt... because of Route route2 has no output processors. You need to add outputs to the route such as to("log:foo").
誰能給我一個關(guān)于如何發(fā)送消息、在網(wǎng)絡(luò)交互中查看并閱讀的實際示例?任何顯示此過程的教程也將不勝感激.
Can someone provide me a practical example on how to send a message,see it in the web interace and also read it? any tutorial showing this process will be also appreciated.
謝謝
=================第二部分
================= SECOND PART
我現(xiàn)在遇到的錯誤如下:
The error I'm getting now is the following:
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - cannot redeclare exchange 'rhSearchExchange' in vhost '/' with different type, durable, internal or autodelete value, class-id=40, method-id=10), null, ""}
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:118)
... 47 more
我有以下設(shè)置:
我收到此錯誤,我認(rèn)為我的 URI 有問題,我必須定義一些我缺少的額外參數(shù)我的交換是直接類型的我的隊列是持久型我的 uri 是:rabbitmq://192.168.59.105:5672/rhSearchExchange?username=guest&password=guest&routingKey=rhSearchQueue
I get this error, I believe I’m doing something wrong with the URI and I have to define some extra parameters that I’m missing My exchange is of direct type My queue is of durable type And my uri is : rabbitmq://192.168.59.105:5672/rhSearchExchange?username=guest&password=guest&routingKey=rhSearchQueue
對此有何意見?
謝謝
推薦答案
所以我昨天能夠解決這個問題,我遇到了與您相同(或至少相似)的問題.
So I was able to figure this out yesterday, I had the same (or at least similar) problems you were having.
您在 RabbitMQ URI 中擁有的選項必須與創(chuàng)建您的交換所使用的選項完全匹配.例如,在我的配置中,我有一個名為 tasks
的交換器,它是一種直接類型,是持久的,并且沒有配置為自動刪除.請注意,rabbitmq 駱駝組件中自動刪除選項的默認(rèn)值為 true
.此外,我想使用路由鍵 camel
獲取消息.這意味著我的 rabbitmq URI 需要看起來像:
The options you have in the RabbitMQ URI must exactly match the options that your exchange was created with. For example, in my configuration, I had an exchange called tasks
that was a direct type, was durable, and was not configured to autodelete. Note that the default value for the autodelete option in the rabbitmq camel component is true
. Additionally, I wanted to get the messages with the routing key camel
. That means my rabbitmq URI needed to look like:
rabbitmq:localhost:5672/tasks?username=guest&password=guest&autoDelete=false&routingKey=camel
此外,我想從一個名為 task_queue
的現(xiàn)有隊列中讀取數(shù)據(jù),而不是讓 rabbitmq camel 組件聲明它自己的隊列.因此,我還需要添加一個額外的查詢參數(shù),所以我的 rabbitmq URI 是
Additionally, I wanted to read from an existing queue, called task_queue
rather than have the rabbitmq camel component declare it's own queue. Therefore, I also needed to add an additional query parameter, so my rabbitmq URI was
rabbitmq:localhost:5672/tasks?username=guest&password=guest&autoDelete=false&routingKey=camel&queue=task_queue
此配置對我有用.下面,我從配置交換和隊列并發(fā)送消息的代碼中添加了一些 Java 代碼片段,以及我的 Camel Route 配置.
This configuration worked for me. Below, I added some Java code snippets from the code that configures the exchange and queue and sends a message, and my Camel Route configuration.
rabbitConnFactory = new ConnectionFactory();
rabbitConnFactory.setHost("localhost");
final Connection conn = rabbitConnFactory.newConnection();
final Channel channel = conn.createChannel();
// declare a direct, durable, non autodelete exchange named 'tasks'
channel.exchangeDeclare("tasks", "direct", true);
// declare a durable, non exclusive, non autodelete queue named 'task_queue'
channel.queueDeclare("task_queue", true, false, false, null);
// bind 'task_queue' to the 'tasks' exchange with the routing key 'camel'
channel.queueBind("task_queue", "tasks", "camel");
發(fā)送消息:
channel.basicPublish("tasks", "camel", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello, world!".getBytes());
駱駝路線:
@Override
public void configure() throws Exception {
from("rabbitmq:localhost:5672/tasks?username=guest&password=guest&autoDelete=false&routingKey=camel&queue=task_queue")
.to("mock:result");
}
我希望這會有所幫助!
這篇關(guān)于Apache駱駝,RabbitMQ如何發(fā)送消息/對象的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!