LoginSignup
2
0

More than 5 years have passed since last update.

RabbitMQのコネクションにクライアント情報を設定する

Posted at

コネクションからクライアント情報を知りたい場合がある

  • clientからRabbitMQサーバーへの接続をロードバランサー経由にした場合、rabbitmqctrlでコネクション情報を見ると、全部同じIPアドレスになってしまう
sudo /usr/sbin/rabbitmqctl list_connections
#=>
#Listing connections ...
#guest   10.0.1.100    34989   running
#guest   10.0.1.100    34997   running
#guest   10.0.1.100    34992   running
#guest   10.0.1.100    34995   running
  • コネクションから監視情報を取りたい(一箇所監視するだけにしたい)
    • あるキューを処理するclient(worker)がいるか
    • このホスト名から始まるclientがいるか

解決案

クライアント情報をコネクションのclient_propertiesに埋め込むことで、rabbitmqctrlからクライアント情報を取ることが可能

client_properties.rb
# -*- coding: utf-8 -*-
require 'amqp'

# client情報を設定
# ホスト名、IPアドレス、プロセスID、起動時刻、処理するキュー名
client_properties = {
  :hostname   => Socket.gethostname,
  :ipaddress  => Socket.getifaddrs.select{|x| x.name == "eth0" and x.addr.ipv4?}.first.addr.ip_address,
  :pid        => Process.pid,
  :start_time => Time.now.to_s,
  :queues     => [ 'queue1' ]
}

# RabbitMQに接続
AMQP.start(
           :host => "localhost", :vhost => "/production",
           :user => "user1", :pass => "pass", :client_properties => client_properties
           ) do |connection, open_ok|
  # channelを作成
  channel = AMQP::Channel.new(connection)

  # queue1を作成
  queue = channel.queue("queue1", :nowait => false, :durable => true)

  # queue1からmessageを取得
  queue.subscribe(:ack => true) do |hdr, msg|
    p "queue  = #{queue.name}" #=> "queue  = queue1"
    p "message= #{msg}"        #=> "message= Hello, world!"

    # RabbitMQのmessageを削除
    hdr.ack
  end
end

埋め込んだクライアント情報を参照する

rabbitmqctrlにclient_propertiesを指定すると、埋め込んだ情報が表示される

sudo /usr/sbin/rabbitmqctl list_connections client_properties
実行結果
Listing connections ...
[{"platform","ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]"},{"product","AMQP gem"},{"information","http://github.com/ruby-amqp/amqp"},{"version","1.0.2"},
 {"hostname","testhost"},{"ipaddress","10.0.1.105"},{"pid",34989},{"start_time","2016-07-19 13:05:07 +0900"},{"queues",["queue1"]}]
[{"platform","ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]"},{"product","AMQP gem"},{"information","http://github.com/ruby-amqp/amqp"},{"version","1.0.2"},
 {"hostname","testhost"},{"ipaddress","10.0.1.128"},{"pid",34997},{"start_time","2016-07-19 13:05:08 +0900"},{"queues",["queue1"]}]
[{"platform","ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]"},{"product","AMQP gem"},{"information","http://github.com/ruby-amqp/amqp"},{"version","1.0.2"},
 {"hostname","testhost"},{"ipaddress","10.0.1.143"},{"pid",34992},{"start_time","2016-07-19 13:05:09 +0900"},{"queues",["queue1"]}]
[{"platform","ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]"},{"product","AMQP gem"},{"information","http://github.com/ruby-amqp/amqp"},{"version","1.0.2"},
 {"hostname","testhost"},{"ipaddress","10.0.1.92"},{"pid",34995},{"start_time","2016-07-19 13:05:19 +0900"},{"queues",["queue1"]}]
...done.
  • 最初のplatform, product, information versionは、amqpが設定した情報
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0