I am trying to publish 2 diffrent message to two different queues one is errorQueue1 and other is errorQueue2 .ErrorQueue1 has virtual host vhost1 and errorQueue2 has virtualHost vhost2 both are on default exchange .My xml and code looks something like below
<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();
}
}
But Wanted to confirm what I am doing is right?Should i write to exchange or can i directly write to different queue?Also one more problem is connection factory is bound to vhost1 How can i write to vhost 2?Should i create one more instance of connection factory?I want to write to 2 different queues on same localhost to 2 different vhosts?