2015-02-11 10 views
7

Teraz nasz kod publishing dla dużych ilości wiadomości wygląda tak:Czy można opublikować wiele wiadomości jednocześnie za pomocą klienta RabbitMQ dla C#?

foreach (var message in messages) 
{ 
    publisher.Publish(message); 
} 

Czy istnieje możliwość wysłania więcej niż jedną wiadomość za pośrednictwem kanału na raz?

publisher.Publish(messages); 

lub jeśli więc kawałek

var chunks = messages.Chunk(100); 
foreach (var chunk in chunks) 
{ 
    publisher.Publish(chunk); 
} 
+0

Rozejrzałem się i nie sądzę, że RabbitMQ obsługuje dozowanie. Czy masz naprawdę duże opóźnienie między serwerem a klientem? –

+0

@Asad tak, tak właśnie jest. Nie publikujemy często, ale kiedy to robimy, mamy około 500 tysięcy wiadomości do opublikowania. – yenta

+0

Czy rzeczywiście wyprofilowałeś i zidentyfikowałeś to jako wąskie gardło w swoim systemie? Myślę, że najlepszą rzeczą byłoby opublikowanie tego, co teraz robisz, i pozwolić AMQP zająć się nim tak szybko, jak pozwala na to Twoja sieć i konsumenci. Jeśli naprawdę masz problemy z wydajnością, być może możliwe jest wysłanie niestandardowej wiadomości "chunked", tak jak to robisz powyżej, a następnie otrzymanie czegoś bliższego konsumentom, który ją otrzyma i opublikowanie wiadomości składowych. –

Odpowiedz

0

Dla RabbitMQ AMQP protokół asynchroniczny dla produkować i konsumować operacji, więc nie jest jasne, w jaki sposób korzystać z partii końcowego konsumenta danej wyjęciu z pudełka.

Możliwe jest tworzenie punktów końcowych dla wiadomości typu chunked i przetwarzanie ich w obiegu pracy, jeśli można przyspieszyć operacje. Jednym z rozwiązań może być na przykład włączenie komponentu grupowania przed klasą wydawcy i wysłanie niestandardowych komunikatów.

+0

Czy znasz jakieś zasoby dotyczące dzielenia wiadomości wsadowych na kolejki? –