.Net NMS.ActiveMQ я должен хранить сеанс и связь между сообщениями отправлять вызовы
Я только начал с 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);
}
}
}
}
Будет только один экземпляр этого класса, который будет вставлен как параметр конструктора.
Я боюсь накладных расходов при создании соединения, сеанса и производителя, потому что сообщения будут отправляться часто (чаще, чем одно сообщение в 10 секунд). Следует ли повторно использовать экземпляры соединения, сеанса или производителя, и как мне реагировать на сбои соединения? Какова общая закономерность в таких сценариях?
2 ответа
NMS.ActiveMQ, как и клиент java, предоставляет транспортный сервер для отработки отказа, который автоматически попытается повторно подключиться к брокеру в случае потери соединения. Вы можете использовать это, чтобы минимизировать код обработки ошибок. Сделайте поиск в Google на тему аварийного транспорта в AMQ.
Воссоздание соединения и связанных с ним ресурсов не является легкой операцией, поэтому лучше всего кешировать их и использовать их столько раз, сколько вам нужно это соединение. В сочетании с отказоустойчивостью вы можете снова и снова надежно использовать один и тот же MessageProducer.
Модель NMS во многом такая же, как и JMS, поэтому чтение в JMS должно обеспечить понимание.
Предположительно вы используете NMS для этого? В качестве предложения вы можете рассмотреть возможность использования очереди блокировки для регулирования количества сообщений, а затем отправить пакет из n сообщений в пакете... Затем вы можете сохранить свой код и просто опубликовать пакет, в то же время удаляя соединение, сеанс и производителя, когда ты закончил как делаешь...
Что касается сбоев соединения - вы должны иметь возможность подключить прослушиватель исключений к вашему сеансу, чтобы получать уведомления о любых проблемах.