消费消息删除_消息队列RabbitMQ
消息队列的应用场景消息队列是改变了服务之间调用的通信方式,使用消息队列可以极大的提供业务代码所花费的时间,在很多场景下,消息队列是非常好用的!当前消息队列中间件的介绍Kafka 适用于大数量,对功能要求不高的应用场景RabbitMQ 适用于功能要求高、而且还注重公平调度原则的应用场景什么是公平调度: 比如多条线程之间,可以非常公平的进行切换: A B A B...没有中转站的ZeroMQ,该消息队
消息队列的应用场景
消息队列是改变了服务之间调用的通信方式,使用消息队列可以极大的提供业务代码所花费的时间,在很多场景下,消息队列是非常好用的!
当前消息队列中间件的介绍
- Kafka 适用于大数量,对功能要求不高的应用场景
- RabbitMQ 适用于功能要求高、而且还注重公平调度原则的应用场景
什么是公平调度: 比如多条线程之间,可以非常公平的进行切换: A B A B...
- 没有中转站的ZeroMQ,该消息队列被设计成是一个Socket API
RabbitMQ详解
RabbitMQ的组成部分
生产者
生产消息的一方
消费者
消费消息的一方
交换机
交换机是用来决定消息发送到哪个队列上的。交换机也支持持久化、临时和自动删除。在RabbitMQ的交换机中有四种类型:direct、fanout、topic、header
4)队列
基于先进先出的原则,具有缓存消息的功能,而且支持持久化、临时、自动删除的功能
持久化: 系统重启,消息还在
临时: 系统重启,消息消失
自动删除: 当没有消费者时,消息就删除
RabbitMQ的安装——基于Docker
Docker-compose.yml
version: '3.1'
services:
rabbitmq:
restart: always
image: rabbitmq:management
container_name: rabbitmq
ports:
- 5672:5672
- 15672:15672
environment:
TZ: Asia/Shanghai
RABBITMQ_DEFAULT_USER: rabbit
RABBITMQ_DEFAULT_PASS: 123456
volumes:
- ./data:/var/lib/rabbitmq
关于RabbitMQ中的虚拟主机的概念
为了让多个项目组同时使用RabbitMQ服务器,可以在服务器中创建多个虚拟主机,每个项目组使用一个虚拟主机就可以解决冲突的问题。
RabbitMQ的初体验
- 引入依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.5.1</version>
</dependency>
- 编写消息的生产者
public class MyProducer {/* 消息的生产者: 1.连接RabbitMQ服务器 2.声明(创建)队列 3.往队列上发送消息 */ //声明队列名称private final static String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception {//1.连接RabbitMQ服务器
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("192.168.2.156");//指明mq服务器的地址
connectionFactory.setPort(5672);
connectionFactory.setUsername("rabbit");//账号
connectionFactory.setPassword("123456");// connectionFactory.setHost("nz1905");//虚拟主机 //得到连接对象
Connection connection = connectionFactory.newConnection();//得到一个频道
Channel channel = connection.createChannel();//2.声明(创建)队列 /* 参数详解: 1)队列的名字 2)是否持久化, 如果是的话,即使服务器重启,队列还在 3)是否独占: 此队列只被一个消费者占有 4)是否自动删除: 如果没有消费者再去使用,那么队列就会删除 5)元数据参数 */
channel.queueDeclare(QUEUE_NAME,false,false,false,null);//3.发布消息 /* * @param exchange 指定的交换机 * @param routingKey the routing key 路由键/目前写的是队列名称 * @param props other properties for the message - routing headers etc 元数据参数 * @param body the message body 消息体 */
String message = "hello world";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());//简单队列模式来发消息
System.out.println("消息已发送");
}
更多推荐


所有评论(0)