RabbitMQ是一个消息中间件,就像邮局一样,你只管往里面放信,会有人来帮你送到目的地,只不过RabbitMQ接收、存储、转发的是二进制数据。
基本概念
生产者:发送消息的代码(就像寄信的人)
队列:RabbitMQ中存放消息的空间(你把信丢到哪个邮筒)
消费者:等待接受消息的代码(邮递员去处理你的信)
hello world

这是一个简单队列,只有一个消费者,一个生产者,熟悉一下基本的使用。
- 引入相关依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.6</version>
</dependenc>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
- 连接到RabbitMQ服务器
public class ConnectionUtils {
public static Connection getConnection() throws IOException, TimeoutException{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.128.135");
factory.setPort(5672);
factory.setVirtualHost("/chenbin");
factory.setUsername("chenbin");
factory.setPassword("chenbin");
return factory.newConnection();
}
}
- 定义生产者
public class Send {
private static String QUEUE_NAME = "my_queue";
public static void main(String[] args) throws IOException, TimeoutException {
//得到连接
Connection connection = ConnectionUtils.getConnection();
//得到channel 后续主要都是用channel来做操作
Channel channel = connection.createChannel();
//声明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String msg = "simple queue";
//发送消息
channel.basicPublish("", QUEUE_NAME, null, msg.getBytes());
//资源释放
channel.close();
connection.close();
}
}
- 定义消费者
public class Receive {
private static String QUEUE_NAME = "my_queue";
public static void main(String[] args) throws Exception{
Connection connection = ConnectionUtils.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//定义消费者
DefaultConsumer consumer = new DefaultConsumer(channel){
/**
* 一旦有消息进入队列,就会触发该方法**/
@Override
public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
throws IOException {
String msg = new String(body);
System.out.println("[receive]:"+msg);
}
};
//监听队列
channel.basicConsume(QUEUE_NAME, true, consumer);
}
}
- 测试
先运行消费者,再运行生产者,可以看到消费者收到了生产者发送的消息。
网友评论