v00*_*d00 5 .net c# activemq-classic apache-nms
我刚开始使用ActiveMQ并得到了几个问题.
我应该使用ActiveMQ发送消息
我现在做了什么:
public class ActiveMQSender
{
private readonly Uri connectionUri;
private readonly IConnectionFactory connectionFactory;
private readonly string destinationName;
public ActiveMQSender()
{
this.connectionUri = new Uri("activemq:tcp://localhost:61616");
this.connectionFactory = new NMSConnectionFactory(this.connectionUri);
this.destinationName = "queue://testQ";
}
public void Send(string msg)
{
using (var connection = this.connectionFactory.CreateConnection())
using (var session = connection.CreateSession())
{
var destination = SessionUtil.GetDestination(session, this.destinationName);
using (var producer = session.CreateProducer(destination))
{
connection.Start();
var message = session.CreateTextMessage(msg);
producer.Send(message);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个类中只有一个实例将作为构造函数参数注入.
我担心连接,会话和生成器创建的开销,因为消息将被频繁发送(通常每10秒发送一条消息)我应该重用连接,会话或生成器实例,以及我应该如何应对连接失败?这种情况下的常见模式是什么?
NMS.ActiveMQ 与 java 客户端一样提供故障转移传输,如果连接丢失,它将自动尝试重新连接到代理。您可以使用它来最小化故障处理代码。对 AMQ 中的故障转移传输主题进行一些 Google 搜索。
重新创建连接和关联资源不是一个轻量级操作,因此最好的办法是缓存它们并在需要该连接时重复使用它们。与故障转移相结合,您可以可靠地反复重用相同的 MessageProducer。
NMS 的模型与 JMS 非常相似,因此阅读一些有关 JMS 的内容应该会有所启发。