1.生产者
package net.stxy.one.message;
import java.util.HashMap;
import java.util.Map;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer {
public static void main(String[] args) throws Exception {
//1.创建连接工厂,并进行配置
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("127.0.0.1");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
//2.创建连接
Connection connection = connectionFactory.newConnection();
//3.创建连接通道
Channel channel = connection.createChannel();
//自定义属性
Map<String,Object> headers = new HashMap<>();
headers.put("my1", "111");
headers.put("my2", "222");
AMQP.BasicProperties properties =new AMQP.BasicProperties.Builder()
.deliveryMode(2)//2表示持久化
.contentEncoding("UTF-8")
.expiration("10000")//10秒钟过期
.headers(headers)//自定义属性
.build();
//4.发送数据,exchange,routingkey,props:消息附加属性,body:消息实体
for (int i = 0; i < 50; i++) {
String msg = "lulu张雪喜欢你";
channel.basicPublish("", "lulu", properties, msg.getBytes());
System.out.println(msg);
}
//5.关闭连接:由小到大
channel.close();
connection.close();
}
}
2.消费者1
package net.stxy.one.message;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
public class Consumer1 {
public static void main(String[] args) throws Exception {
//1.创建连接工厂,并进行配置
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("127.0.0.1");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
//2.创建连接
Connection connection = connectionFactory.newConnection();
//3.创建连接通道
Channel channel = connection.createChannel();
//4.生命一个队列 1. 队列称,2.持久化,3.独占:只只有改通道能监听,4.脱离exchange会自动删除5.扩展参数
String queueName = "lulu1";
channel.queueDeclare(queueName, true, false, false, null);
//5.创建一个消费者
QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
//6.设置channel 1.队列名称,2.自动签收 3.消费者对象
channel.basicConsume(queueName, true, queueingConsumer);
//7.获取消息 会一直阻塞。可以设置时间通过
while (true) {
System.out.println("开始消费数据");
Delivery delivery = queueingConsumer.nextDelivery();//没有设置时间一直阻塞。
String msg = new String(delivery.getBody());//消息实体body
System.out.println("消费端收到消息"+msg);
System.err.println("消费端收到消息"+msg);
//Envelope envelope = delivery.getEnvelope();//消息属性
}
}
}
3.消费者2
package net.stxy.one.message;
import java.util.Map;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
public class Consumer {
public static void main(String[] args) throws Exception {
//1.创建连接工厂,并进行配置
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("127.0.0.1");
connectionFactory.setPort(5672);
connectionFactory.setVirtualHost("/");
//2.创建连接
Connection connection = connectionFactory.newConnection();
//3.创建连接通道
Channel channel = connection.createChannel();
//4.生命一个队列 1. 队列称,2.持久化,3.独占:只只有改通道能监听,4.脱离exchange会自动删除5.扩展参数
String queueName = "lulu";
channel.queueDeclare(queueName, true, false, false, null);
//5.创建一个消费者
QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
//6.设置channel 1.队列名称,2.自动签收 3.消费者对象
channel.basicConsume(queueName, true, queueingConsumer);
//7.获取消息 会一直阻塞。可以设置时间通过
while (true) {
System.out.println("开始消费数据");
Delivery delivery = queueingConsumer.nextDelivery();//没有设置时间一直阻塞。
String msg = new String(delivery.getBody());//消息实体body
Map<String,Object> headers = delivery.getProperties().getHeaders();
System.out.println(headers.get("my1"));
System.out.println(headers.get("my2"));
//Envelope envelope = delivery.getEnvelope();//消息属性
}
}
}