topic路由模式是根据绑定的key发送消息队列
一、设置交换机:
1.新建交换机ex2,模式为topic模式:
新建消息队列queue3、queue4
交换机绑定消息队列:
二、编写代码:
生产者修改部分:
消息发送到交换机ex2,如果是a开头的发送到key为a的队列,如果是b开头的发送到key为b的队列
if (msg.startsWith(“a”)){
//第二个人参数是绑定的key
channel.basicPublish(“ex2”,“a”, null,msg.getBytes());
System.out.println("发送:"+msg);
}else if (msg.startsWith("b")){
channel.basicPublish("ex2","b", null,msg.getBytes());
System.out.println("发送:"+msg);
}
生产者代码:
package mq.service;
import mq.utils.Mq_utils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import java.util.Scanner;
public class SendMsg {
public static void main(String[] args) throws Exception {
System.out.println("请输入消息:");
Scanner scanner = new Scanner(System.in);
String msg = null;
while (!"quit".equals(msg = scanner.nextLine())){
Connection connection = Mq_utils.getConnection(); //相当于jdbc的链接
Channel channel = connection.createChannel();//相当于jdbc的statement
if (msg.startsWith("a")){
//第二个人参数是绑定的key
channel.basicPublish("ex2","a", null,msg.getBytes());
System.out.println("发送:"+msg);
}else if (msg.startsWith("b")){
channel.basicPublish("ex2","b", null,msg.getBytes());
System.out.println("发送:"+msg);
}
channel.close();
connection.close();
}
}
}
消费者1代码:
package mq.service;
import mq.utils.Mq_utils;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ReceiveMsg1 {
public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = Mq_utils.getConnection();
Channel channel = connection.createChannel();
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//body就是从队列中获取的数据
String msg = new String(body);
System.out.println("consumer-1-接受"+msg);
}
};
channel.basicConsume("queue3",true,consumer);
}
}
消费者2代码:
package mq.service;
import mq.utils.Mq_utils;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ReceiveMsg2 {
public static void main(String[] args) throws IOException, TimeoutException {
Connection connection = Mq_utils.getConnection();
Channel channel = connection.createChannel();
Consumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
//body就是从队列中获取的数据
String msg = new String(body);
System.out.println("consumer-2-接受"+msg);
}
};
channel.basicConsume("queue4",true,consumer);
}
}
执行后的结果:
生产者:
消费者1:
消费者2: