一、mq修改:
1.先建好交换机:
type:fanout模式
2.队列绑定交换机:
不需要key和argument
二、修改代码
订阅模式就是生产者会把消息推送到交换机,消费者绑定队列,生产者生产消息后,每个消费者都会接收到消息。(是图中的第三种模式)
和工作模式类似:主要修改一下
producter:
修改部分:
//不指定消息队列 指定交换机
channel.basicPublish("ex1","", null,msg.getBytes());
producter总代吗:
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
//不指定消息队列 指定交换机
//
channel.basicPublish("ex1","", null,msg.getBytes());
System.out.println("发送:"+msg);
channel.close();
connection.close();
}
}
}
消费一修改:
channel.basicConsume("queue1",true,consumer);
消费二修改:
channel.basicConsume("queue2",true,consumer);
消费一总代吗:
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("queue1",true,consumer);
}
}
消费二总代码:
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("queue2",true,consumer);
}
}
执行结果:
生产者:
消费1:
消费二:
可以观察到生产者生产消息后,每个消费者都会接收到消息。