RabbitMQ是消息代理。从本质上说,它接受来自生产者的信息,并将它们传递给消费者。在两者之间,它可以根据你给它的路由,缓冲规则进行传递消息。
如果你的工作中需要用到RabbitMQ,那么我建议你先在电脑上安装好RabbitMQ服务器,然后打开eclipse,跟这我的教程一步步的学习RabbitMQ,这样你会对RabbitMQ有一个全面的认识,而且能打好一个很好的基础。
准备工作:安装erlang,RabbitMQ等工具 配置相应的环境变量 这里就不多说!
一:helloWorld的实现
P消费者将消息推送到queue队列中,队列将消息推送给消费者或者缓存到本地缓存(取决于消费者的状态) C消费者向queue取相关的信息或者queue推送给消费者
注意:
生产者,消费者和队列(RabbitMQ)不必部署在同一台机器上。实际在生产环境的大多数应用中,他们都是分开部署的
代码实现:
首先加入依赖包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.6.3</version>
</dependency>
接下来创建连接rabbitMq服务器的工具类
package wxtest.rabbitMq;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
public class ConnectionUtil {
public static Connection getConnection() throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
// 设置MabbitMQ, 主机ip或者主机名
factory.setHost("localhost");
// 创建一个连接
Connection connection = factory.newConnection();
return connection;
}
}
生产者:
package wxtest.rabbitMq;
import com.rabbitmq.client.Channel;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 消息发送方
**/
public class rabbitMqSend {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建一个通道
Channel channel = ConnectionUtil.getConnection().createChannel();
// 指定一个队列(给队列明命名 那么接受者也应该是这个对列名)
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// 发送消息
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
// 关闭频道和连接
channel.close();
ConnectionUtil.getConnection().close();
}
}
消费者:
package wxtest.rabbitMq;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 消息接受方
**/
public class rabbitMqRev {
private final static String QUEUE_NAME = "hello";
public static void main(String[] args) throws IOException, TimeoutException {
// 创建一个通道
Channel channel = ConnectionUtil.getConnection().createChannel();
// 指定一个队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
Consumer defaultConsumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
channel.basicConsume(QUEUE_NAME, true, defaultConsumer);
}
}
输出结果如下
[x] Received 'Hello World!'
[x] Received 'Hello World!'
[x] Received 'Hello World!'