본문 바로가기

OpenSource(Bigdata&distribution&Network)/kafka

RabbitMQ Hello World

RabbitMQ HelloWorld 를 찍어보기로 한다.

원래 이건 인터넷 서핑중에 우연히 발견한 오픈소스? 이다. 

원래 얼랭을 뒤져보다가. 발견한건데. 메세지 서버로 쓸만하다. 메세지 큐서버 라고 해야하나??? 

아무튼 내가 X라고 보내면 서버에서 메세지를 가지고 있다가 받는쪽에서 X라고 받는 이런형태더라.


아래와 같은 형태로 HelloWorld를 찍기로 했다.


사용한 RabbitMQ 버전 : 3.6.1

Java Client 버전 : 3.6.1 ( 이건 당연히 이클립스에 서버콘솔쪽에 classpath추가함 )

JDK : 1.8



192.168.0.5 : 내가 작업하는 컴퓨터 ( 이클립스에서 Console java 하나 만들어서 실행 )

192.168.0.111 : RabbitMQ 서버가 설치된 서버

Console Result : 192.168.0.111안에 자바로 실행한 결과 받는 콘솔.



https://www.rabbitmq.com/ 에 있는 tutorial 에서 helloworld 를 그대로 실행하면 아래처럼 에러가 날것이다.

Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

        at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:339)

        at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:716)

        at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:760)

        at mqtest.main(mqtest.java:21)


그도 그럴것이 rabbitmqctl 로 help를 살펴보면 웬 사용자 추가, 호스트설정, 퍼미션 어쩌구 저쩌구등이 있다.

그래서 그것들을 추가함.

대충 그럴듯한것들을 추가해봤다 ㅋㅋ


id : testman 

pw : 1234

vhost : /testhost

퍼미션은 전부를 준것같음 ( 인터넷 구글링 뒤져봤을땐 대충 그런거같음 ㅋㅋ 잘모르니;;; 나중에 자세히 파보면 또기록을 남길예정. ) 

[root@os1 ~]# rabbitmqctl add_user testman 1234

[root@os1 ~]# rabbitmqctl add_vhost /testhost

[root@os1 ~]# rabbitmqctl set_permissions -p /testhost testman ".*" ".*" ".*" 




192.168.0.111에 있는 자바소스 (받을놈)

import java.io.IOException;

import java.util.concurrent.TimeoutException;


import com.rabbitmq.client.ConnectionFactory;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Consumer;

import com.rabbitmq.client.Envelope;

import com.rabbitmq.client.AMQP;

import com.rabbitmq.client.DefaultConsumer;


public class mqrecv {

  private final static String QUEUE_NAME = "testqueue_namessssssss";


  public static void main(String[] argv)

      throws java.io.IOException,

             java.lang.InterruptedException {


    ConnectionFactory factory = new ConnectionFactory();

         factory.setHost("192.168.0.111");

            factory.setUsername("testman");

            factory.setPassword("1234");

            factory.setVirtualHost("/testhost");

    Connection connection;



        try {

                connection = factory.newConnection();



                Channel channel = connection.createChannel();


            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            System.out.println(" [*] Waiting for messages. To exit press CTRL+C");




        Consumer consumer = new DefaultConsumer(channel) {

              @Override

              public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)

                  throws IOException {

                String message = new String(body, "UTF-8");

                System.out.println(" [x] Received '" + message + "'");

              }

            };

            channel.basicConsume(QUEUE_NAME, true, consumer);



        } catch (TimeoutException e) {


                e.printStackTrace();

        }



}

}


위에꺼 컴파일 하고 실행하면 아래처럼 나온다.

받을것대기중인상태.




그리고나서~



아래 보내는부분 만들기.


192.168.0.5인 내가 작업하는 곳 이클립스에서 사용한 소스 (보낼놈)


import java.util.concurrent.TimeoutException;


import com.rabbitmq.client.ConnectionFactory;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.Channel;


public class mqsend {

private final static String QUEUE_NAME = "testqueue_namessssssss";

public static void main(String[] args) throws java.io.IOException 

{

    ConnectionFactory factory = new ConnectionFactory();

    factory.setHost("192.168.0.111");

    factory.setUsername("testman");

    factory.setPassword("1234");

    factory.setVirtualHost("/testhost");

    Connection connection;

try {

connection = factory.newConnection();

Channel channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);

    String message = "Hello Ocmpromaster hahahahahahah !!!!!!";

    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

    System.out.println(" [x] Sent '" + message + "'");

    channel.close();

    connection.close();

    

} catch (TimeoutException e) {

e.printStackTrace();

}

    

}

}


위의 소스를 만들고 실행(메세지보내기) 하면 아래 이클립스 OutPut쪽에 send메세지가 보임.



위의 받는쪽 결과에 메세지에 이클립스에서 보낸 메세지가 바로 보인다 ㅋㅋㅋ~~~~ 오~~~~~~~~~~~~~




이제 이걸로 뭘할까 ㅡ_ㅡ;;;;;;;;;

우선 tutorial 부분몇개보고 내가 테스트중인 6노드 서버에 다 설치를 해서 뭔가를 해볼려고 한다. ~ 뭔가 쓸모가 있을듯. ㅎㅎ...