.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 сообщений в пакете... Затем вы можете сохранить свой код и просто опубликовать пакет, в то же время удаляя соединение, сеанс и производителя, когда ты закончил как делаешь...

Что касается сбоев соединения - вы должны иметь возможность подключить прослушиватель исключений к вашему сеансу, чтобы получать уведомления о любых проблемах.

Другие вопросы по тегам