一.简单案例
1.创建Maven工程,pom.xml引入依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
2.生产者
public class MyProducer {
private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
// 连接 IP
factory.setHost("127.0.0.1");
// 连接端口
factory.setPort(5672);
// 虚拟机
factory.setVirtualHost("/");
// 用户
factory.setUsername("guest");
factory.setPassword("guest");
// 建立连接
Connection conn = factory.newConnection();
// 创建消息通道
Channel channel = conn.createChannel();
// 发送消息
String msg = "HelloWorld";
channel.basicPublish(EXCHANGE_NAME, "test.best", null, msg.getBytes());
channel.close();
conn.close();
}
}
3.消费者
public class MyConsumer {
private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";
private final static String QUEUE_NAME = "SIMPLE_QUEUE";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
Connection conn = factory.newConnection();
Channel channel = conn.createChannel();
// 声明交换机(参数1.交换机名
// 2.交换机类型:direct,topic,fanout.
// 3.是否持久化,代表交换机在服务器重启后是否还存在
// 4.是否自动删除,设置为TRUE则表是自动删除,自删除的前提是至少有一个队列或者交
// 换器与这交换器绑定,之后所有与这个交换器绑定的队列或者交换器都与此解绑.
// 5.其它一些结构化参数比如:alternate-exchange)
channel.exchangeDeclare(EXCHANGE_NAME,"direct",false, false, null);
// 声明队列(参数1 队列名
// 2是否持久化,代表队列在服务器重启后是否还存在
// 3是否排他性队列。排他性队列只能在声明它的 Connection中使用(可以在同一个
// Connection 的不同的 channel 中使用),连接断开时自动删除。
// 4.是否自动删除。如果为 true,至少有一个消费者连接到这个队列,之后所有与这个队列
// 连接的消费者都断开时,队列会自动删除。
// 5.队列的其他属性
// )
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println(" Waiting for message....");
// 绑定队列和交换机
channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,"test.best");
// 创建消费者
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String msg = new String(body, "UTF-8");
System.out.println("Received message : '" + msg + "'");
System.out.println("consumerTag : " + consumerTag );
System.out.println("deliveryTag : " + envelope.getDeliveryTag());
}
};
// 开始获取消息
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
5.打开控制台localhost:15672.可观察队列内消息的动态变化