我已经在Windows机器上安装了Apache Qpid Java代理的M4版本,并使用开箱即用配置(通过qpid-server.bat脚本)启动它。
我现在正尝试使用RabbitMQ C#客户端库(版本1.5.3,为.NET 3.0编译)将消息发布到队列中;我的代码是:
public void PublishMessage(string message)
{
ConnectionFactory factory = new ConnectionFactory();
factory.Parameters.VirtualHost = "...";
IProtocol protocol = Protocols.FromEnvironment();
using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672))
{
using (IModel ch = conn.CreateModel())
{
string exchange = "...";
string routingKey = "...";
ch.BasicPublish(exchange, routingKey, null, Encoding.UTF8.GetBytes(message));
}
}
}
基本上,我不确定factory.Parameters.VirtualHost
和字符串exchange
和routingKey
使用的值。我尝试了各种组合,但似乎没有任何工作 - 我最接近的是在Qpid服务器日志中看到以下内容:
2009-03-19 17:11:04,248 WARN [pool-1-thread-1] queue.IncomingMessage (IncomingMessage.java:198) - MESSAGE DISCARDED: No routes for message - Message[(HC:896033 ID:1 Ref:1)]: 1; ref count: 1
看起来好像Qpid服务器正在接收消息,但不知道如何处理它。
关于我在客户端代码中需要什么配置值的任何建议(请记住我在virtualhosts.xml中使用默认的Qpid配置)将非常感激。有关虚拟主机,交换,队列和路由密钥的更多常规信息,以及Qpid如何将它们全部链接在一起,也非常有用。
提前谢谢你,
艾伦
答案 0 :(得分:6)
仅供参考,我最终成功完成了这项工作。下面的代码将消息发送到localhost虚拟主机上test.direct交换中的队列test-queue(默认Qpid代理配置的所有部分):
public void PublishMessage(string message)
{
ConnectionFactory factory = new ConnectionFactory();
factory.Parameters.VirtualHost = "/localhost";
IProtocol protocol = Protocols.AMQP_0_8_QPID;
using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672))
{
using (IModel ch = conn.CreateModel())
{
ch.ExchangeDeclare("test.direct", "direct");
ch.QueueDeclare("test-queue");
ch.QueueBind("test-queue", "test.direct", "TEST", false, null);
ch.BasicPublish("test.direct", "TEST", null, Encoding.UTF8.GetBytes(message));
}
}
}