Producer:消息生产者
Message:消息
Exchange:交换机
Binding:绑定交换机和队列
Routing Key:路由键,决定路由规则
Queue:队列,存储消息
Connection:连接服务端
Channel:信道,读写数据
Consumer:消费者
Broker:服务实例
Virtual host:虚拟主机,用于区分不同服务,蕾丝与不同域名,不会相互影响
路由键(Routing key):就是专门用于决定交换机和队列如何进行绑定的
第一步:执行
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
第二步,执行:
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
第三步:sudo yum install rabbitmq-server-3.8.2-1.el7.noarch
第四步,看到类似以下的画面:
输入y
即可完成安装。
启动RabbitMQ:systemctl start rabbitmq-server
看看端口有没有起来,查看状态:rabbitmqctl status
配置阿里云安全组,打开15672端口
添加admin用户:
rabbitmqctl add_user admin password
rabbitmqctl set_user_tags admin administrator
浏览器访问ip: 15672
用admin,密码password即可登录
访问出现错误:
可能没有安装插件,只需安装一下即可,输入命令:rabbitmq-plugins enable rabbitmq_management
支持多语言,java就是支持的其中一种语言
API丰富,RabbitMQ提供的Java客户端一系列的API来完成各种操作
(1)引入依赖:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
RabbitMQ内部会要求我们再去引入一个依赖,记录日志的,没有这个依赖,不能正常运作
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.29</version>
</dependency>
(2)发送消息
里面RabbitMQ设置的主机地址就是阿里云服务器上RabbitMQ的主机地址
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("121.40.123.230");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("password");
// 建立连接
Connection connection = connectionFactory.newConnection();
// 获得信道
Channel channel = connection.createChannel();
// 声明队列 hello 队列名
channel.queueDeclare("hello", false, false, false, null);
// 声明消息
String publishMessage = "hello world!";
channel.basicPublish("", "hello", null, publishMessage.getBytes());
System.out.println("发送了消息");
// 关闭连接
channel.close();
connection.close();
}
(3)消费者
public static void main(String[] args) throws IOException, TimeoutException {
// 创建连接工厂
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("121.40.123.230");
connectionFactory.setUsername("admin");
connectionFactory.setPassword("password");
// 建立连接
Connection connection = connectionFactory.newConnection();
// 获得信道
Channel channel = connection.createChannel();
// 声明队列 hello 队列名
channel.queueDeclare("hello", false, false, false, null);
// 接收消息消费
channel.basicConsume("hello", true, new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, StandardCharsets.UTF_8);
System.out.println("接收到消息:" + message);
}
});
}
(4)根据消息内容做处理
(5)多个消费者平均压力
(1)引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependdency>
(2)在yml配置文件中进行配置RabbitMQ
注:学习来源——官网+慕课网