RabbitMQ에서 다른 라우팅 키를 사용하여 단일 대기열에 여러 메시지를 게시하는 방법은 무엇입니까?

Braj Ankit

내 코드는 다음과 같습니다.

package pushnotiruntest;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Send extends Thread {

   String name = "";
   String app_type = "";
   private static final String EXCHANGE_NAME = "topic_exchange";

    public void run()
    {
        ConnectionFactory connFac = new ConnectionFactory();
        connFac.setHost("localhost");

        try {

                Connection conn = connFac.newConnection();
                Channel channel = conn.createChannel();
                channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
                for(int j=1; j<=20000; j++)
                {
                    //randomWait();

                    String routingKey = j+"."+"update"+"."+app_type;
                    String msg = name;
                    channel.basicPublish(EXCHANGE_NAME, routingKey, null, msg.getBytes("UTF-8"));
                    System.out.println("Sent " + routingKey + " : " + msg + "");
                }

                channel.close();
                conn.close();

        } catch (IOException ex) {
            Logger.getLogger(Send.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Exception1 :--"+ex);

        } catch (TimeoutException ex) {
            Logger.getLogger(Send.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Exception 2:--"+ex);
        }
    }

    /*void randomWait()
    {
        try {
           Thread.currentThread().sleep((long)(3*Math.random()));
        } catch (InterruptedException x) {
           System.out.println("Interrupted!");
        }
    }*/

   public static void main(String[] args) {
        // TODO code application logic here

        Send test1 = new Send();
        test1.name = "Hello ANDROID";
        test1.app_type = "ANDROID";
        Send test2 = new Send();
        test2.name = "Hello IOS";
        test2.app_type = "IOS";
        Send test3 = new Send();
        test3.name = "Hello WINDOWS";
        test3.app_type = "WINDOWS";

        test1.start();
        test2.start();        
        test3.start();
    }
}

//javac -cp amqp-client-4.0.2.jar Send.java Recv.java

//java -cp .;amqp-client-4.0.2.jar;slf4j-api-1.7.21.jar;slf4j-simple-1.7.22.jar Recv

//java -cp .;amqp-client-4.0.2.jar;slf4j-api-1.7.21.jar;slf4j-simple-1.7.22.jar 
Send

다른 라우팅 키를 사용하여 생산자가 보낸 메시지를 단일 대기열에 저장하려는 Java (사용 된 메시지 브로커는 RabbitMQ)로 코드를 작성하고 있습니다.

그리고 라우팅 키 패턴과 일치하는 다른 소비자의 패턴과 관련하여 해당 메시지를 가져옵니다. (나는 패턴 매칭을 위해 토픽 교환을 사용하고 있습니다).

가브리엘 레 산토 마지오

두 명의 소비자가 필요한 경우 두 개의 대기열을 사용해야합니다. from exchangeto에 대한 바인딩 queue(s)은 구독 중에 라우팅 키를 결정할 수 없습니다.

더 많은 라우팅 키를 동일한 대기열에 바인딩 할 수 있지만 키로 필터링 할 수는 없습니다.

다음과 같은 것이 필요하다고 생각합니다.

channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);
channel.queueDeclare(QUEUE_NAME_1, true, false, false, null);
channel.queueDeclare(QUEUE_NAME_2, true, false, false, null);
channel.queueBind(QUEUE_NAME_1, EXCHANGE_NAME, "my.rk.1");
channel.queueBind(QUEUE_NAME_2, EXCHANGE_NAME, "my.rk.2");
channel_consumer_1.basicConsume(QUEUE_NAME_1, false, new DefaultConsumer(channel_consumer) {...}
....
channel_consumer_2.basicConsume(QUEUE_NAME_2, false, new DefaultConsumer(channel_consumer) {...}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관