вступление
В этой статье кратко изложены возможности, которые есть у программистов, когда дело доходит до программирования WebSphere MQ на Python.
WebSphere MQ — это инструмент для всех, и независимо от того, какой у вас опыт, C, C ++, Java, COBOL, Visual Basic или что-то еще, вы также найдете что-то интересное в Python.
Если вы никогда не слышали о WebSphere MQ раньше, я объясню это, рискуя немного упростить. В очереди WebSphere AMQP для AMQP — это то же самое, что Oracle DB для PostgreSQL в земле СУБД.
Актеры
Есть три библиотеки и проекты, из которых Python-программисты могут выбирать, и все они с открытым исходным кодом. Все они позволяют вам подключаться и обмениваться сообщениями с любым приложением MQ, независимо от того, на каком языке или языках оно написано.
Каждый из них основан на предыдущем, чтобы обеспечить более полезные функции с меньшим количеством ручного кодирования.
PyMQI
PyMQI — это библиотека самого низкого уровня, которая обеспечивает прямой доступ ко всем примитивам, которые обычно связаны с программированием MQ на других языках: очереди, темы, администраторы очередей, подписки, команды PCF и все остальное, что необходимо для непосредственного управления объектами MQ.
PyMQI — это инструмент, используемый для быстрых одноразовых заданий, особенно если вы уже знакомы с MQI, который представляет собой C API, предоставляемый WebSphere MQ. PyMQI в основном предоставляет объектно-ориентированный слой Python поверх MQI.
Если вы администратор, и вам нужно что-то удобное для быстрого создания полезного инструмента, Python и PyMQI — инструменты для использования.
Вот пример кода для помещения сообщения в очередь:
import pymqi queue_manager = 'QM01' channel = 'SVRCONN.1' host = '192.168.1.135' port = '1434' queue_name = 'TEST.1' message = 'Hello from Python!' conn_info = '{}({})'.format(host, port) qmgr = pymqi.connect(queue_manager, channel, conn_info) queue = pymqi.Queue(qmgr, queue_name) queue.put(message) queue.close() qmgr.disconnect()
Весенний Питон
Spring Python берет хорошие части Spring для Java и реализует их на Pythonic. Среди прочего, можно найти поддержку программирования JMS WebSphere MQ на Python . Другими словами, полностью беспрепятственный способ обмена сообщениями с приложениями Java от Python.
Для тех, кому интересно, это достигается путем ручного создания и анализа всех заголовков MQRFH2, необходимых за кулисами.
Кроме того, у него есть фабрики соединений, фоновые прослушиватели и шаблон JMS, который является объектом более высокого уровня, с помощью которого можно манипулировать сообщениями MQ.
Используйте Spring Python, если:
- Вам нужен API более высокого уровня.
- Вы в порядке с ручным кодированием.
- Вы уже использовали Spring для Java в другом месте.
Обратите внимание, что Spring Python теперь требует использования JMS, но это то, что скоро изменится, и этот пост будет обновлен, чтобы отразить это.
Вот пример кода для помещения сообщения в очередь:
from springpython.jms.core import JmsTemplate from springpython.jms.factory import WebSphereMQConnectionFactory qm = 'QM.1' channel = 'SVRCONN1.1' host = '192.168.1.121' port = '1434' queue1 = 'TEST.1' factory = WebSphereMQConnectionFactory(qm, channel, host, port) jms_template = JmsTemplate(factory) jms_template.send('Hello world', queue1) factory.destroy()
Примеры использования Spring Python
Zato
[Полное раскрытие: Я являюсь создателем Zato]
Zato является полноценной ESB и Бэкенда сервера , написанным на Python , который поддерживает MQ и на много из других технологий и протоколов и данных форматов .
Его абстракции находятся на высшем уровне, и это требует очень мало кодирования. На самом деле, никакого MQ-специфического программирования не требуется вообще. Можно просто сосредоточиться на получении запросов (что требует нулевого кодирования) и создании сообщений для отправки, в то время как Zato устанавливает соединения, восстанавливает соединение при необходимости, добавляет заголовки и все остальное, что должно быть сделано. Вы просто создаете сообщение, а остальное обрабатывается автоматически.
Вот пример кода для помещения сообщения в очередь:
from zato.server.service import Service class MyService(Service): def handle(self): self.outgoing.jms_wmq.send('msg', 'connection-name', 'Q.1')
Больше примеров использования Zato MQ .
Можно забыть об особенностях WebSphere MQ, потому что такие детали настраиваются с помощью графического интерфейса (как показано ниже), API , CLI или массово в JSON.
Резюме
- Используйте PyMQI для быстрых задач или низкоуровневой функциональности.
- Используйте Spring Python для API более высокого уровня или если вы знакомы с Java.
- Используйте Zato, если вам нужен полноценный ESB и сервер приложений с балансировкой нагрузки, оперативным развертыванием и другими функциями.