RabbitMQ 안내

4683 단어 RabbitMQ
메시지 미들웨어 의 역할:디 결합,중복 저장(지속 화),확장 성,삭 봉,회복 성,순서 보증,버퍼,비동기 통신.
RabbitMQ 는 Erlang 언어 로 이 루어 진 AMQP(고급 메시지 큐 프로 토 콜)메시지 미들웨어 입 니 다.
RabbitMQ 의 특징:신뢰성(지구 화,전송 확인,발표 확인),유연 한 경로(교환기 진행 경로),확장 성(클 러 스 터),높 은 가용성(미 러 설정),다양한 프로 토 콜(AMQP,STOMP,MQTT),다 중 언어 클 라 이언 트(자바,C\#,Python,Ruby,PHP),관리 인터페이스,플러그 인 메커니즘.
management plugin 플러그 인의 접근 포트 는 15672 입 니 다.guest 이 계 정 은 기본적으로 로 컬 네트워크 localhost 를 통 해 만 접근 할 수 있 고 원 격 네트워크 접근 이 제한 되 어 있 습 니 다.
생산자 클 라 이언 트 코드 예시:
package com.lmy.demo.rabbitmq.demo;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;

public class RabbitProducer {
    private static final String EXCHANGE_NAME="exchange_demo";
    private static final String ROUTING_KEY="routingkey_demo";
    private static final String QUEUE_NAME="queue_demo";
    private static final String IP_ADDRESS="127.0.0.1";
    private static final int PORT=5672; //rabbitMQ          5672
    public static void main(String[] args) throws Exception {
        ConnectionFactory factory=new ConnectionFactory();
        factory.setHost(IP_ADDRESS);
        factory.setPort(PORT);
        factory.setUsername("root");
        factory.setPassword("root");
        Connection connection=factory.newConnection();//    
        Channel channel=connection.createChannel();//    
        //    type="direct"、    、         
        channel.exchangeDeclare(EXCHANGE_NAME,"direct",true,false,null);
        //       、    、        
        channel.queueDeclare(QUEUE_NAME, true, false,false,null);
        //              
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
        //          ;hello world
        String message="Hello world";
        channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN,
                message.getBytes());
//        //    
//        channel.close();
//        connection.close();
    }
}

소비자 클 라 이언 트 코드:
package com.lmy.demo.rabbitmq.demo;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import com.rabbitmq.client.Address;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;

public class RabbitConsumer {
    private static final String QUEUE_NAME="queue_demo";
    private static final String IP_ADDRESS="127.0.0.1";
    private static final int PORT=5672;
    public static void main(String[] args) throws Exception {
        Address[] addresses=new Address[]{
                new Address(IP_ADDRESS,PORT)
        };
        ConnectionFactory factory=new ConnectionFactory();
        factory.setUsername("root");
        factory.setPassword("root");
        //            demo    ,      
        Connection connection=factory.newConnection(addresses);//    
        final Channel channel=connection.createChannel();//    
        channel.basicQos(64);//           ack      
        Consumer consumer=new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                    BasicProperties properties, byte[] body) throws IOException {
                System.out.println("recv message:"+new String(body));
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        };
        channel.basicConsume(QUEUE_NAME,consumer);
        channel.basicConsume(QUEUE_NAME, false, "myConsumerTag",new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                    BasicProperties properties, byte[] body) throws IOException {
                String routingKey=envelope.getRoutingKey();
                String contentType=properties.getContentType();
                
            }
        });
        //            ,    
        TimeUnit.SECONDS.sleep(5);
        channel.close();
        connection.close();
    }
}

Default Consumer 를 계승 하 는 방식 으로 소 비 를 실현 하 는 것 을 추천 하고,Queueing Consumer 를 사용 하 는 방식 으로 소 비 를 실현 하 는 것 을 추천 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기