一,介绍
RabbitMQ:它不处理信息,而是接收、存储和转发二进制的数据信息块,包含 exchange 交换机和 queue 队列模块
producer
:生产只意味着发送。发送消息的程序是生产者
queue
:信息流经 RabbitMQ 与对应程序,但它们只能存储在队列中。队列只受主机的内存和磁盘限制的约束,它本质上是一个很大的消息缓存区。生产者们可以将信息发送到一个队列,然后消费者们可以从队列中接收数据
consumer
:消费者从队列中获取数据信息,交给等待接收消息的应用程序进行处理,与生产者无关!
生产者、消费者和 RabbitMQ 中间件不用处在同一个主机上,可以分别部署。应用程序可以既是生产者,也是消费者
二、web 控制台操作
创建队列:
Name:队列名字
Durability:队列持久性规则 1.Durable(持久保存) 2.Transient(临时保存)
Auto delete:1.No 2.Yes 如果 Yes,队列将在至少一个消费者连接之后删除自己,然后所有消费者断开连接。
Arguments:队列参数
在队列中发布一条消息:
Delivery mode:消息传递模式 1. Non-persistent 2.Persistent 信息是否持久化,Persistent 时,代表发布的消息时持久的;Non-persistent 时,重启 RabbitMQ ,队列信息丢失
扩:在接收者接收消息并处理的时候会出现各种各样的问题:抛出异常导致与RabbitMQ连接断开,程序挂掉,网络问题等等。
往往在出现这些问题的时候我们通常都希望队列能保存这些消息,并在程序再次起来的时候能够重新处理,或如果是负载均衡的模式下,能够把这个消息重新分配给其他的同等的接受者来处理。这同样也是RabbitMQ对消息持久化的一种功能。
Headers:消息请求头参数,
Properties:其他消息属性
Payload:消息主体内容
发布成功后,我们可以看到在队列里保存了一条消息:
获取队列中的信息:
在队列获取消息是一个破坏性的操作,但是我们为了便于直观学习,在此进行页面消费信息。
Ack mode:消息确认模式,1.Nack message requeue true 该方式获取消息不会从队列删除消息 2.Ack message requeue false 该方式每次获取一条消息后,会从队列移除该消息 3.reject requeue true 消费者拒绝该条消息,并重入队列给下一个订阅的消费者消费 4.reject requeue false 消费者拒绝该条消息,并将之丢弃
三、代码方式
首先引入 RabbitMQ 的 Java spring 客户端依赖,使用 Spring Boot 来引导和配置 Spring AMQP 项目。选择 Maven 来构建这个项目,主要引入:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
复制代码
yaml:填写相应的字段属性
spring:
rabbitmq:
host: 192.168.159.129
port: 5672
username: admin
password: admin
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
创建 hello
队列
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean
public Queue queue() {
return new Queue("hello");
}
}
消费者—-这里采用 @RabbitListener
注解进行监听 hello
队列,后面会谈谈 @RabbitListener
的用法:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@RabbitListener(queues = "hello")
public void receive(String msg) {
System.out.println("消费者消费信息:" + msg);
}
}
生产者—-我们在测试类中编写生产者代码:
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void producer() {
String routingKey = "hello";
String msg = "隔壁超市薯片半价啦!";
rabbitTemplate.convertAndSend(routingKey, msg);
}
控制台输出:
消费者消费信息:隔壁超市薯片半价啦!
为您推荐与 rabbitmq 相关的帖子:
- RabbitMQ 学习笔记 -- 01 简介
- RabbitMQ 学习笔记 -- 03 多消费者
- RabbitMQ 学习笔记 -- 04 扇形交换机
- RabbitMQ 学习笔记 -- 05 路由模式
- RabbitMQ 学习笔记 -- 06 Topic 交换机
- RabbitMQ 学习笔记 -- 07 初探@RabbitListener
- RabbitMQ 学习笔记 -- 08 RabbitTemplate 及消息序列化
- RabbitMQ 学习笔记 -- 09 RabbitMQ 的持久化
- RabbitMQ 学习笔记 -- 10 RabbitMQ 消费者确认和发布者确认
- RabbitMQ 学习笔记 -- 11 RabbitMQ 死信队列
- RabbitMQ 消息队列模型使用介绍
- RabbitMQ 3.11.0 已发布
- RabbitMQ 3.11.6 发布
- RabbitMQ 3.11.8 已发布,AMQP 开源实现
- RabbitMQ 3.11.13 已发布,AMQP 开源实现
- RabbitMQ 3.11.14 已发布,AMQP 开源实现