RabbitMQ tutorialsのErlangクライアントのサンプルコードを1行ずつ実行する

https://github.com/rabbitmq/rabbitmq-tutorials/tree/master/erlangにあるやり方で、Erlangクライアントのサンプルはすぐ動かせる。

  $ git clone https://github.com/rabbitmq/rabbitmq-tutorials
  $ cd rabbitmq-tutorials/erlang
  
  $ wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/rabbit_common-2.7.0.ez
  $ unzip rabbit_common-2.7.0.ez
  $ ln -s rabbit_common-2.7.0 rabbit_common
  
  $ wget http://www.rabbitmq.com/releases/rabbitmq-erlang-client/v2.7.0/amqp_client-2.7.0.ez
  $ unzip amqp_client-2.7.0.ez
  $ ln -s amqp_client-2.7.0 amqp_client

サーバはもう起動しているものとして、以下を実行する。

  $ ./send.erl
   [x] Sent 'Hello World!'
  
  $ ./receive.erl
   [*] Waiting for messages. To exit press CTRL+C
   [x] Received <<"Hello World!">>
  ^C

このサンプルコードをerlang shellから1行ずつ対話的に実行したいが、.hrlファイルを-include_libする部分はシェルからでは実行できない。

#!/usr/bin/env escript
%%! -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin

-include_lib("amqp_client/include/amqp_client.hrl").

そこで、カレントディレクトリにuser_default.erlというファイルを作り、以下のような内容を記述する。

  $ cat <<EOF > user_default.erl
  -module(user_default).
  -compile(export_all).
  -include_lib("amqp_client/include/amqp_client.hrl").
  EOF

user_default.erlをコンパイルしておくと、次にerlang shellを起動したときに、user_defaultが自動的にロードされる。

  $ erlc user_default.erl

必要なオプションを与えてerlang shellを起動し、tutorialsのコードの内容を1行ずつ実行してみる。

  $ erl -pz ./amqp_client ./rabbit_common ./amqp_client/ebin ./rabbit_common/ebin
  ...
  1> {ok, Connection} =
  1>         amqp_connection:start(#amqp_params_network{host = "localhost"}).
  {ok,<0.46.0>}
  2> {ok, Channel} = amqp_connection:open_channel(Connection).
  {ok,<0.59.0>}