ConnectionUtil
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
/**
* @Description: TODO
* @author: qinlei
* @date: 2020年05月13日 15:07
*/
public class ConnectionUtil {
public static Connection getConnection()throws Exception{
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置请求头
factory.setHost("localhost");
//设置端口
factory.setPort(5672);
//虚拟主机名称
factory.setVirtualHost("/ql_test");
//账号密码
factory.setUsername("ql");
factory.setPassword("123456");
//创建连接
return factory.newConnection();
}
}
生产者(发布消息)
import com.rabbitmq.client.*;
/**
* @Description: TODO
* @author: qinlei
* @date: 2020年05月07日 9:59
*/
public class ProducerDemo {
public static final String QUEUE_NAME = "first_queue";
public static void main(String[] args) {
try {
//创建连接
Connection connection = ConnectionUtil.getConnection();
//创建通道
Channel channel = connection.createChannel();
//创建队列
/*
参数一:队列名称
参数二:是否持久化队列
参数三:是否独占本次连接
参数四:是否在不使用的时候自动删除队列
参数五:队列其他参数
*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//要发送的消息
String msg = "这是一条消息";
channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
System.out.println("消息已发送");
channel.close();
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
消费者(获取队列中的消息)
import com.rabbitmq.client.*;
import java.io.IOException;
/**
* @Description: TODO
* @author: qinlei
* @date: 2020年05月13日 15:09
*/
public class ConsumerDemo {
public static void main(String[] args) {
try {
Connection connection = ConnectionUtil.getConnection();
//创建通道
Channel channel = connection.createChannel();
//创建队列
channel.queueDeclare(ProducerDemo.QUEUE_NAME,false,false,false,null);
//监听消息
DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
/*
consumerTag消息者标签 在channel.basicConsume时候可以指定
envelope消息内容 可从中获取消息id,消息routingkey 交换机 消息和重转标记(收到消息失败后是否需要重新发送)
properties 消息属性
body 消息体
*/
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println(consumerTag);
System.out.println(envelope.toString());
System.out.println(properties.toString());
System.out.println("消息内容:" + new String(body));
}
};
/*
监听消息
参数一:队列名称
参数二:是否自动确认 设置为true表示消息接收到自动向mq回复接收到了
*/
channel.basicConsume(ProducerDemo.QUEUE_NAME,false,defaultConsumer);
}catch (Exception e){}
}
}
一步一步打断点可在web管理页面查看当前运行到哪步