Мне нужен пример того, как передать одно и то же сообщение нескольким получателям с помощью библиотеки EasyNetQ - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь использовать EasyNetQ для отправки и получения сообщений от RabbitMQ, Мне нужно отправить одно и то же сообщение нескольким получателям или тем, кто когда-либо подключен одновременно.

Я попробовал шаблон обмена сообщениями «публикация-подписка», и он работает нормально, но это больше похоже на циклический перебор, когда после получения получателем сообщения оно удаляется из очереди, и никто больше не может его увидеть.

Вот мой отправитель сообщения.

        for (int i = 0; i < 10; i++)
        {
            using (IBus bus = RabbitHutch.CreateBus(Host))
            {
                bus.Publish(new TextMessage { Text = $"{i}: Hello World from EasyNetQ" }, "dashboard");
            }
        }

Вот мой приемник.

public void GetMessages () {

        using (IBus bus = RabbitHutch.CreateBus(Host))
        {
            bus.Subscribe<TextMessage>("dashboard", HandleTextMessage);

            Console.WriteLine("Listening for messages. Hit <return> to quit.");
            Console.ReadLine();
        }
    }

    static void HandleTextMessage(TextMessage textMessage)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("Got message: {0}", textMessage.Text);
        Console.ResetColor();
    }

После получения сообщения никакой другой получатель не может увидеть это сообщение, и мне нужно, чтобы все подключенные получатели увидели одно и то же сообщение.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Я не понял, как работает RabbitMQ. Все, что мне было нужно, это создать Exchange и заставить Exchange отправлять сообщения в очереди. Я думал, что это сделали Queues.

0 голосов
/ 04 июля 2019

На самом деле EasyNetQ отвлечет вас от необходимости иметь дело с биржами в большинстве случаев. Чтобы добиться того, о чем вы просите, просто укажите при подписке другой идентификатор подписки, например, GUID:

public void GetMessages() 
{

    using (IBus bus = RabbitHutch.CreateBus(Host))
    {
        bus.Subscribe<TextMessage>(Guid.NewGuid().ToString(), HandleTextMessage);

        Console.WriteLine("Listening for messages. Hit <return> to quit.");
        Console.ReadLine();
    }
}

static void HandleTextMessage(TextMessage textMessage)
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("Got message: {0}", textMessage.Text);
    Console.ResetColor();
}

Больше информации здесь: https://github.com/EasyNetQ/EasyNetQ/wiki/Subscribe

0 голосов
/ 05 января 2019

Я полагаю, что вопрос описывает поведение разветвления. Они не используются широко, но ясно, что это то, что вы ищете. Более подробную информацию можно найти здесь: https://www.tutlane.com/tutorial/rabbitmq/csharp-rabbitmq-fanout-exchange

...