티스토리 뷰

메시지큐(message queue)를 사용 할 일이 생길거 같아 관련 내용들을 급하게(!) 찾아봄.

사실 전부터 메시지큐잉에 대해 관심(?)이 있긴 했지만, 이제야 살짝 맛을 보게 됨. ㅡ.ㅡ;;;

하지만 이번 글도 역시나 퀵가이드에 가까운.. 그냥 수박 겉핥기 식! 임.. :)


* 일단, jms 관련 간단설명 블로그

http://www.openeg.co.kr/238


메시지큐잉을 위해 RabbitMQ 를 사용하기로 함.

홈페이지 : http://www.rabbitmq.com/

다운로드 : http://www.rabbitmq.com/download.html


다양한 언어로 client를 지원하고, 더더군다나 홈페이지에서 예제로 설명하는 client 가 자바와 파이썬이라 자바기반의 앱을 개발하는 나로썬 괜찮은 선택이라 생각했음.


우선, 바이너리부터 다운로드하자~

1. 위의 다운로드 페이지에서 서버플랫폼 중에서 Fedora/RHEL 을 선택~!

(개발 및 상용장비가 CentOS임)


2. http://www.rabbitmq.com/install-rpm.html 에서 친절히 설명해 주는 대로 설치 시작~!

RabbitMQ는 Erlang이란 언어로 만들어졌다(?)는데, 그래서 인지 RabbitMQ를 설치하기 전에 Erlang을 먼저 설치해야 한다. 이 페이지에서는 크게 3가지 방법을 제시하는데,

첫번째 방법을 사용해 본다.


우선 http://fedoraproject.org/wiki/EPEL/FAQ#howtouse 에서 epel 을 설치한다.

[root@dev rabbitmq_install]# su -c 'rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm'

http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm(을)를 복구합니다

경고: /var/tmp/rpm-tmp.JISECd: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY

준비 중...               ########################################### [100%]

   1:epel-release           ########################################### [100%]


그리고 나서 erlang 설치.
yum install erlang

뭔가 주르륵주르륵 지나가면서 열심히 설치함. ㅡ.ㅡa;;; 아래 화면처럼 나오면 되는 건가??

Installed: erlang.x86_64 0:R14B-04.3.el6 Dependency Installed: erlang-appmon.x86_64 0:R14B-04.3.el6 erlang-asn1.x86_64 0:R14B-04.3.el6 erlang-common_test.x86_64 0:R14B-04.3.el6 erlang-compiler.x86_64 0:R14B-04.3.el6 erlang-cosEvent.x86_64 0:R14B-04.3.el6 erlang-cosEventDomain.x86_64 0:R14B-04.3.el6 erlang-cosFileTransfer.x86_64 0:R14B-04.3.el6 erlang-cosNotification.x86_64 0:R14B-04.3.el6 erlang-cosProperty.x86_64 0:R14B-04.3.el6 erlang-cosTime.x86_64 0:R14B-04.3.el6 erlang-cosTransactions.x86_64 0:R14B-04.3.el6 erlang-crypto.x86_64 0:R14B-04.3.el6 erlang-debugger.x86_64 0:R14B-04.3.el6 erlang-dialyzer.x86_64 0:R14B-04.3.el6 erlang-diameter.x86_64 0:R14B-04.3.el6 erlang-docbuilder.x86_64 0:R14B-04.3.el6 erlang-edoc.x86_64 0:R14B-04.3.el6 erlang-erl_docgen.x86_64 0:R14B-04.3.el6 erlang-erl_interface.x86_64 0:R14B-04.3.el6 erlang-erts.x86_64 0:R14B-04.3.el6 erlang-et.x86_64 0:R14B-04.3.el6 erlang-eunit.x86_64 0:R14B-04.3.el6 erlang-examples.x86_64 0:R14B-04.3.el6 erlang-gs.x86_64 0:R14B-04.3.el6 erlang-hipe.x86_64 0:R14B-04.3.el6 erlang-ic.x86_64 0:R14B-04.3.el6 erlang-inets.x86_64 0:R14B-04.3.el6 erlang-inviso.x86_64 0:R14B-04.3.el6 erlang-jinterface.x86_64 0:R14B-04.3.el6 erlang-kernel.x86_64 0:R14B-04.3.el6 erlang-megaco.x86_64 0:R14B-04.3.el6 erlang-mnesia.x86_64 0:R14B-04.3.el6 erlang-observer.x86_64 0:R14B-04.3.el6 erlang-odbc.x86_64 0:R14B-04.3.el6 erlang-orber.x86_64 0:R14B-04.3.el6 erlang-os_mon.x86_64 0:R14B-04.3.el6 erlang-otp_mibs.x86_64 0:R14B-04.3.el6 erlang-parsetools.x86_64 0:R14B-04.3.el6 erlang-percept.x86_64 0:R14B-04.3.el6 erlang-pman.x86_64 0:R14B-04.3.el6 erlang-public_key.x86_64 0:R14B-04.3.el6 erlang-reltool.x86_64 0:R14B-04.3.el6 erlang-runtime_tools.x86_64 0:R14B-04.3.el6 erlang-sasl.x86_64 0:R14B-04.3.el6 erlang-snmp.x86_64 0:R14B-04.3.el6 erlang-ssh.x86_64 0:R14B-04.3.el6 erlang-ssl.x86_64 0:R14B-04.3.el6 erlang-stdlib.x86_64 0:R14B-04.3.el6 erlang-syntax_tools.x86_64 0:R14B-04.3.el6 erlang-test_server.x86_64 0:R14B-04.3.el6 erlang-toolbar.x86_64 0:R14B-04.3.el6 erlang-tools.x86_64 0:R14B-04.3.el6 erlang-tv.x86_64 0:R14B-04.3.el6 erlang-typer.x86_64 0:R14B-04.3.el6 erlang-webtool.x86_64 0:R14B-04.3.el6 erlang-wx.x86_64 0:R14B-04.3.el6 erlang-xmerl.x86_64 0:R14B-04.3.el6 libtool-ltdl.x86_64 0:2.2.6-15.5.el6 tcl.x86_64 1:8.5.7-6.el6 tk.x86_64 1:8.5.7-5.el6 unixODBC.x86_64 0:2.2.14-12.el6_3 wxBase.x86_64 0:2.8.12-1.el6.centos wxGTK.x86_64 0:2.8.12-1.el6.centos wxGTK-gl.x86_64 0:2.8.12-1.el6.centos Dependency Updated: zlib.x86_64 0:1.2.3-29.el6 zlib-devel.x86_64 0:1.2.3-29.el6 Complete!



이제 RabbitMQ를 실행시킨다.(root 권한으로 실행시켜봄)

cd ${rabbitmq_home}/sbin

./rabbitmq-server start

ERROR: epmd error for host "dev": address (cannot connect to host/port)


역시나 한번에 될 리가 없는.. ㅜㅜ;


/etc/hosts 파일에 아래 내용 추가.

127.0.0.1 dev


그리고 다시 실행하니.. 뭔가(?) 되는가 싶더니만 역시나 fail..

[root@dev sbin]# ./rabbitmq-server start


              RabbitMQ 3.2.3. Copyright (C) 2007-2013 GoPivotal, Inc.

  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/

  ##  ##

  ##########  Logs: ./../var/log/rabbitmq/rabbit@dev.log

  ######  ##        ./../var/log/rabbitmq/rabbit@dev-sasl.log

  ##########

              Starting broker...


BOOT FAILED

===========


Error description:

   {could_not_start_tcp_listener,{"::",5672}}


Log files (may contain more information):

   ./../var/log/rabbitmq/rabbit@dev.log

   ./../var/log/rabbitmq/rabbit@dev-sasl.log


Stack trace:

   [{rabbit_networking,start_listener0,4},

    {rabbit_networking,'-start_listener/4-lc$^0/1-0-',4},

    {rabbit_networking,start_listener,4},

    {rabbit_networking,'-boot_tcp/0-lc$^0/1-0-',1},

    {rabbit_networking,boot_tcp,0},

    {rabbit_networking,boot,0},

    {rabbit,'-run_boot_step/1-lc$^1/1-1-',1},

    {rabbit,run_boot_step,1}]




BOOT FAILED

===========


Error description:

   {could_not_start,rabbit,

       {bad_return,

           {{rabbit,start,[normal,[]]},

            {'EXIT',

                {rabbit,failure_during_boot,

                    {could_not_start_tcp_listener,{"::",5672}}}}}}}


Log files (may contain more information):

   ./../var/log/rabbitmq/rabbit@dev.log

   ./../var/log/rabbitmq/rabbit@dev-sasl.log


{"init terminating in do_boot",{rabbit,failure_during_boot,{could_not_start,rabbit,{bad_return,{{rabbit,start,[normal,[]]},{'EXIT',{rabbit,failure_during_boot,{could_not_start_tcp_listener,{"::",5672}}}}}}}}}


Crash dump was written to: erl_crash.dump

init terminating in do_boot ()

[root@dev sbin]#



뭔가 에러가 난 거 같은데.. 쫄지않고 찬찬히 살펴보니 요런 메세지가~

Error description:

   {could_not_start_tcp_listener,{"::",5672}}


음.. 5672 포트? 그래서 혹시나 하고 포트를 찾아보니..

[root@dev sbin]# netstat -na |grep 5672

tcp        0      0 0.0.0.0:5672                0.0.0.0:*                   LISTEN


헐.. 뭐지 이녀석은..? 누구냐 넌!!

그래서 녀석의 정체를 알기 위해 구글링한 결과..

http://serverfault.com/questions/342964/centos-qpidd-default-network-service


AMQP 데몬이 이미 사용 중이라는..

[root@dev sbin]# cat /etc/services |grep 5672

amqp            5672/tcp                # AMQP

amqp            5672/udp                # AMQP

amqp            5672/sctp               # AMQP


그럼, 5672 대신 다른 포트를 rabbitMQ에서 사용하면 될 것 같음.

${RabbitMQ_HOME}/etc/rabbitmq/rabbitmq-env.conf 을 생성해서 포트 지정.


샘플 구동했는데, 아래와 같은 예외 발생.

javaclient에서 5672 포트로 접속을 하는데 현재 qpidd 이 5672 포트로 실행되고 있어서 그런 것임.

아래처럼 기존 qpid 데몬을 내린다. 참고[http://lovedev.tistory.com/archive/201209]
[ root@pungjoo /root ]# chkconfig --list qpidd
qpidd 0:해제 1:해제 2:활성 3:활성 4:활성 5:활성 6:해제
[ root@pungjoo /root ]# chkconfig qpidd off
[ root@pungjoo /root ]# chkconfig --list qpidd
qpidd 0:해제 1:해제 2:해제 3:해제 4:해제 5:해제 6:해제
[ root@pungjoo /root ]# 
[ root@pungjoo /root ]# service qpidd stop
Qpid AMQP 데몬을 정지 중: [ OK ]
[ root@pungjoo /root ]#

그리고, RabbitMQ 의 설정파일(${RabbitMQ_HOME}/etc/rabbitmq/rabbitmq-env.conf 파일을 삭제하거나 백업한 후, RabbitMQ를 재시동 하면 된다.

실제 프로젝트에서 사용하게 되면 그 때 다시 심도(?)있는 내용으로 정리해야 겠다!! :)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함