2010-01-22 5 views
2

Я хочу использовать ActiveMQ как брокер сообщений, взаимодействующий между компонентом C++ и компонентом Java в двух процессах. Например. Компонент C++ является издателем, а компонент Java - подписчиком (возможно, несколько подписчиков). Я смотрю сайт ActiveMQ и упоминает инструмент OpenWire и ActiveMQ-CPP. Тем не менее, все примеры на веб-сайтах используют один и тот же язык как для производителя, так и для потребителя.Издатель и подписчик ActiveMQ в нескольких языках (C++ Java)

Мои вопросы:

1.Can ActiveMQ работа для производителя/потребителя на разных языках?

2.В разных процессах? Как?

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

Лили

ответ

2

OpenWire является протоколом и, следовательно, теоретически может быть реализован в любом месте, но это не означает, что существуют полные реализации для каждого языка. Штраф печати клиента C++ говорит:

«Начиная с версии 2.0, ActiveMQ-CPP поддерживает протокол OpenWire v2, с некоторыми исключениями ObjectMessage - Мы не можем реконструировать объект (ы), содержащийся в ObjectMessage в. C++, поэтому, если ваше приложение подписано на очередь или тему, на которую отправлено ObjectMessage, вы получите сообщение, но не сможете извлечь из него объект ».

Поэтому, если вы хотите отправлять данные через процессы, вы пишете свои компоненты на C++ и Java, чтобы использовать API (чтобы не использовать типы ObjectMessage, если вы используете ActiveMQ-CPP). Затем запустите сервер ActiveMQ ... сообщите своим программам о подключении к нему, и он должен работать.

Но если вы действительно пытаетесь сделать межпроцессное общение, когда вы управляете обоими клиентами, это может быть немного тяжело. Вы могли бы быть заинтересованы в ответах на What is the best approach for IPC between Java and C++? и Good alternative to shared memory IPC for Java/C++ apps on Linux

+0

Почему ActiveMQ тяжело? – Lily

+0

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

+0

Спасибо за ваш ответ. Я хочу запускать разные модули на разных машинах. На самом деле, в моем случае это шаблон издателя/подписчика (несколько издателей/нескольких подписчиков). Я не уверен, какой из них лучше: сокет против ActiveMQ? – Lily

0

Прямо с первой страницы ActiveMQ'S:

Supports a variety of Cross Language Clients and Protocols from Java, C, C++, C#, Ruby, Perl, Python, PHP

* OpenWire for high performance clients in Java, C, C++, C# 
* Stomp support so that clients can be written easily in C, Ruby, Perl, 
    Python, PHP, ActionScript/Flash, Smalltalk to talk to ActiveMQ as well 
    as any other popular Message Broker 

Мы протестировали его с PHP (используя Stomp) и Java (с использованием OpenWire).

Относительно процессов: различные производители и потребители могут, конечно, быть в совершенно разных процессах, обмениваясь, например, TCP или SSL.