使用amqp写入两个不同的队列

问题描述:

我想将两个不同的队列发布到两个不同的队列一个是errorQueue1,另一个是errorQueue2 .ErrorQueue1有虚拟主机vhost1和errorQueue2有虚拟主机vhost2都是默认交换.My xml和代码看起来像下面使用amqp写入两个不同的队列

<rabbit:connection-factory id="connectionFactory" host="${rabbit.host}" port="${rabbit.port}" virtual-host="${rabbitVhost1}" 
           username="${rabbit.username}" password="${rabbit.password}"/> 

    <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory"/> 
    <rabbit:admin id="rabbitAdmin" connection-factory="connectionFactory"/> 



    <rabbit:queue id="queueOne" name="${queue.one.queue}"/> 
    <rabbit:queue id="queueTwo" name="${queue.two.queue}"/> 

    <rabbit:listener-container connection-factory="connectionFactory"> 
     <rabbit:listener id="typeOneListener" ref="typeOneListener" method="handleMessage" queues="queueOne"/> 
     <rabbit:listener id="typeTwoListener" ref="typeTwoListener" method="handleMessage" queues="queueTwo"/> 
    </rabbit:listener-container> 


    <rabbit:topic-exchange id="my.topic" name="${my.topic}"> 
       <rabbit:bindings> 
        <rabbit:binding pattern="${queue.one.queue}" queue="queueOne"/> 
        <rabbit:binding pattern="${queue.two.queue}" queue="queueTwo"/> 
       </rabbit:bindings> 
    </rabbit:topic-exchange> 



@Autowired 
    RabbitTemplate rabbitTemplate; 
public void sendMessage() { 
     Message message; 
     for (int i = 0; i < 10; i++) { 
      message = createMessage1(">>> For one"); 
      rabbitTemplate.send("queue.one", message); 
      message = createMessage2(">>> For two"); 
      rabbitTemplate.send("queue.two", message); 
      System.out.println("Message sent: " + message); 
      index.getAndIncrement(); 
     } 
    } 

,但希望确认我在做什么是正确的?我应该写交换或我可以直接写信给不同的队列?还有一个多的问题是连接工厂势必VHOST1哪能写入虚拟主机2?我应该创建一个更多的连接工厂实例?我想写入2个不同的队列在同一个本地主机到2个不同的虚拟主机?

连接工厂势必VHOST1我为什么能写入虚拟主机2

您需要2个连接工厂和2角独立RabbitTemplate秒。