oslo.messagingの環境構築方法
この後の解説で実際にoslo.messagingのサンプルを動かすため、ここで実行環境を構築します。ここではVagrantで構築したUbuntu 16.04環境にoslo.messagingの実行環境を構築する方法を紹介します。
Vagrantのインストール方法については、過去の記事で詳しく解説されておるので、そちらを参照してください。ここでは、以下のとおりVirtualBoxとVagrantが皆さんの環境にインストールされた状態から解説をはじめます。
$ VBoxManage --version 5.0.26r108824 $ vagrant -v Vagrant 1.8.5 $
使用するVagrant Boxは、chefが公開しているモノを利用します。Vagrantがインストールされたマシンで以下のコマンドを実行するとUbuntu 16.04が構築されます。
$ vagrant init bento/ubuntu-16.04; vagrant up --provider virtualbox
構築後、以下のコマンドでログインできます。以降の操作は構築したUbuntu 16.04環境内で実行してください。
$ vagrant ssh
まずは必要なパッケージのインストールを行います。
vagrant@vagrant:~$ sudo apt-get update; sudo apt-get install -y rabbitmq-server python-pip unzip git
次にoslo.messagingと依存パッケージのインストールを行います。
vagrant@vagrant:~$ sudo pip install oslo.messaging
最後にoslo.messagingによるRPCおよび通知を行うサンプルコードを取得します。サンプルは以下のリポジトリを利用します。
次のコマンドでリポジトリの最新版を取得します。
vagrant@vagrant:~$ git clone https://github.com/userlocalhost2000/oslo-messaging-examples.git
以上で、oslo.messagingを動かす環境が整いました。以降では、oslo.messagingをどのように使うかについてサンプルを用いて解説していきます。
oslo.messagingを使ったRPC処理の実装
それではサンプルコードを動かしながらoslo.messaingでRPC over MQを行う方法を解説していきます。
その前に、システムのアウトラインについて簡単に把握したいと思います。以下は、クライアント/サーバの内部アーキテクチャについて表した図になります。
内部アーキテクチャ(出典:ツチノコブログ)
クライアント側ではRPCClientオブジェクトがユーザアプリケーションに対して、RPC処理のインターフェースを提供します。またTransportオブジェクトが、RabbitMQやKafka、ZeroMQなどの各種MQを抽象化し、ユーザはRPCClientが提供するインターフェースを通してMQ非依存なRPCリクエストをサーバに送ることができます。
サーバ側では、ユーザからのRPCリクエストを処理するServerオブジェクトを生成します。その際、サーバ側のアプリケーションで各PRC要求に対応するコールバック関数を定義したクラス(Endpoint)を1つ以上実装してやり、それらをServerオブジェクト生成時に指定します。
それではサンプルコードを見ながらそれぞれの使い方を把握し、実際に動かしてみます。
