6.2. クライアントの例

6.2.1. AMQ Online Python の例

次の AMQ Online Python の例を使用して、アプリケーションを AMQ Online に接続できます。この例では、myqueue という名前の queue タイプのアドレスを作成したと想定しています。

from __future__ import print_function, unicode_literals
from proton import Message
from proton.handlers import MessagingHandler
from proton.reactor import Container

class HelloWorld(MessagingHandler):
    def __init__(self, server, address):
        super(HelloWorld, self).__init__()
        self.server = server
        self.address = address

    def on_start(self, event):
        conn = event.container.connect(self.server)
        event.container.create_receiver(conn, self.address)
        event.container.create_sender(conn, self.address)

    def on_sendable(self, event):
        event.sender.send(Message(body="Hello World!"))
        event.sender.close()

    def on_message(self, event):
        print(event.message.body)
        event.connection.close()

Container(HelloWorld("amqps://_messaging-route-hostname_:443", "myqueue")).run()

6.2.1.1. 階層トピックでサブスクライバーを作成する際の既知の問題

AMQ Online で階層トピックにサブスクライバーを作成すると、ブローカーが代わりに競合するコンシューマーとしてサブスクライバーを作成するという既知の問題が存在します (トピックではなくキューのようにアドレスを処理します)。

この問題の回避策として、ソースで トピック ケイパビリティーを設定します。

手順

  1. simple_recv.py ファイルで、from proton.reactor import Container を変更して ReceiverOption を追加します。
class CapabilityOptions(ReceiverOption):
    def apply(self, receiver):
        receiver.source.capabilities.put_object(symbol("topic"))
  1. 次の行を変更して、options=CapabilityOptions () を追加します。
def on_start(self, event):
        event.container.create_receiver(conn, self.address, options=CapabilityOptions())