2015-03-05 2 views
1

Я бы очень хотел попробовать ZeroMQ, и мне интересно, можно ли решить мою проблему с помощью этого.Можете ли вы создать централизованную тему в ZeroMQ?

ПРОБЛЕМА: У меня есть несколько подписчиков и несколько издателей. В централизованной архитектуре брокер издатели опубликуют сообщение на тему (вроде как многоадресный адрес), и подписчики получат сообщения из темы и действуют на сообщения. Я не могу использовать Multicast, потому что наша топология сети имеет несколько подсетей, и ИТ-ребята не будут перенаправлять мои многоадресные пакеты во все подсетей.

Поскольку нет централизованного брокера, как решить эту проблему в ZeroMQ? (пример кода будет отличным на любом языке)

ответ

0

Выполнял немного чтения. И это возможно в ZeroMQ в конце концов. Вы бы использовать «ЭКСПЕДИТОР» устройство как:

Instructions

import zmq 

def main(): 

    try: 
     context = zmq.Context(1) 
     # Socket facing clients 
     frontend = context.socket(zmq.SUB) 
     frontend.bind("tcp://*:5559") 

     frontend.setsockopt(zmq.SUBSCRIBE, "") 

     # Socket facing services 
     backend = context.socket(zmq.PUB) 
     backend.bind("tcp://*:5560") 

     zmq.device(zmq.FORWARDER, frontend, backend) 
    except Exception, e: 
     print e 
     print "bringing down zmq device" 
    finally: 
     pass 
     frontend.close() 
     backend.close() 
     context.term() 

if __name__ == "__main__": 
    main() 
+0

Это версия «брокера» (уменьшенная, чтобы соответствовать цели), и это то, о чем я говорил в третьем варианте в своем ответе. – Jason

1

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

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

Если вы поддерживаете этот список, это становится проблемой для каждого узла, вы создаете новый узел для управления списком подписчиков для вас. Когда издатель закручивается, он уведомляет о себе узел менеджера, который информирует подписчиков о необходимости подписки на него.

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

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

+0

Джейсон, именно то, что я искал! Просто хотелось получить представление о том, как это можно сделать в ZeroMQ и будет ли это подходящим для этого MQ. Похоже, что он вернулся к RabbitMQ для меня. – Denis

+0

@Denis, ZMQ - это скорее библиотека обмена сообщениями, чем полная система обмена сообщениями. RabbitMQ, и это похоже на то, как он обрабатывает различные коммуникационные парадигмы, где ZMQ оставляет стратегию до вас. Это может быть очень мощным, когда стандартные решения (RabbitMQ) не совсем соответствуют вашим потребностям или имеют слишком много накладных расходов в одной области и недостаточно в другом ... но это означает, что вы также должны быть разработчиком протоколов исполнителю. Если AMQP работает для вас (он был разработан теми же людьми, что и ZMQ, кстати), то это, вероятно, правильный выбор. – Jason

Смежные вопросы