Activemq artemis 如何从客户端设置路由类型ActiveMQ Artemis
我试着效仿hello world的例子。对于常规的ActiveMQ,它可以工作,但是ActiveMQ Artemis让我头疼。我想有些配置我做得不对。地址是通过多播路由生成的。我想我需要单播(队列路由) 下面的代码段不适用于ActiveMQ的artemis版本。我想做的可能吗?我想自动创建一个持久队列Activemq artemis 如何从客户端设置路由类型ActiveMQ Artemis,activemq-artemis,Activemq Artemis,我试着效仿hello world的例子。对于常规的ActiveMQ,它可以工作,但是ActiveMQ Artemis让我头疼。我想有些配置我做得不对。地址是通过多播路由生成的。我想我需要单播(队列路由) 下面的代码段不适用于ActiveMQ的artemis版本。我想做的可能吗?我想自动创建一个持久队列 public class SimpleAmqpTest { [Fact] public async Task TestHelloWorld()
public class SimpleAmqpTest
{
[Fact]
public async Task TestHelloWorld()
{
Address address = new Address("amqp://guest:guest@localhost:5672");
Connection connection = await Connection.Factory.CreateAsync(address);
Session session = new Session(connection);
Message message = new Message("Hello AMQP");
var target = new Target
{
Address = "simple-queue",
Durable = 1,
};
SenderLink sender = new SenderLink(session, "sender-link", target, null);
await sender.SendAsync(message);
ReceiverLink receiver = new ReceiverLink(session, "receiver-link", "simple-queue");
message = await receiver.ReceiveAsync();
receiver.Accept(message);
await sender.CloseAsync();
await receiver.CloseAsync();
await session.CloseAsync();
await connection.CloseAsync();
}
}
最后发现我做错了什么,因为Amqp没有队列和主题的配置,它可以在功能中定义。由于某些原因,Artemis默认创建主题(多播)。如果您需要AnyCast,您可以使用
Capabilities=newsymbol[]{newsymbol(“queue”)}
指定您的需要。对于完整测试事实:
public async Task TestHelloWorld()
{
//strange, works using regular activeMQ and the amqp test broker from here: http://azure.github.io/amqpnetlite/articles/hello_amqp.html
//but this does not work in ActiveMQ Artemis
Address address = new Address("amqp://guest:guest@localhost:5672");
Connection connection = await Connection.Factory.CreateAsync(address);
Session session = new Session(connection);
Message message = new Message("Hello AMQP");
Target target = new Target
{
Address = "q1",
Capabilities = new Symbol[] { new Symbol("queue") }
};
SenderLink sender = new SenderLink(session, "sender-link", target, null);
sender.Send(message);
Source source = new Source
{
Address = "q1",
Capabilities = new Symbol[] { new Symbol("queue") }
};
ReceiverLink receiver = new ReceiverLink(session, "receiver-link", source, null);
message = await receiver.ReceiveAsync();
receiver.Accept(message);
await sender.CloseAsync();
await receiver.CloseAsync();
await session.CloseAsync();
await connection.CloseAsync();
}
用于自动创建地址和队列的路由类型可以通过
默认队列路由类型
和默认地址路由类型
地址设置
元素进行控制。它们都默认为多播
。如果您不想更改AMQP客户端,可以将相关地址的AMQP客户端更改为anycast
。