JMS—AMOP高级网络
核心概念
Message,消息头(route-key路由键)、消息体、
Publisher,生产者生产消息—传给Exchange-->Broker
Broker 消息代理(broker,queue)
Exchange 交换器,接受消息并路由给服务器队列(Binding),绑定关系—route-key。
Consumer 监听队列
一个客户端只会建立一条连接
一条连接,多个通道
VHost,虚拟主机,将broker隔离开,为虚拟主机,以路径表示,/java,/php
docker run -d —name rabbitmq -p xxx
一堆业务端口
后台管理系统,15672端口 创建相关
exchanges,在管理后台创建exchange、创建queue、绑定queue
交换机类型:根据分发策略不同,分为,
Direct、路由键与队列名完全匹配,点对点,
Fanout、广播,不处理路由键
Topic、主题类广播,匹配一个topic进行广播,将路由键和绑定键的字符串切分,识别通配符,#(匹配0或多个) *(匹配一个),usea.news会发给usa.#,#.news
headers(性能低,基本不用)
Spring整合
spring自动配置@RabbitAutoConfiguration
properties配置spring.rabbitma.host port virtual-host=/
开启功能 @EableRabbit
使用AmqpAdmin创建exchange相关
类DirectExchange、amqp.declereExchange,
类Queue、amqp.declearQueue
类Binding
收发消息
RabbitTemplate
发自定义类的数据,使用configure 配置messageConverter
对应类/方法监听消息@RabbitListener(queue={“name”})(监听那些队列)
必须有@EnableRabbit
方法上@RabbitHandler(重载不同消息)
Queue,可以有多个监听,但是只能被消费一次
接受消息,当前消息处理完,后接受下个消息
可靠投递、消息确认机制
Publisher->broker confirm Callback 抵达服务器
publisher(exchange->queue) returnCallback 抵达队列
consumer(queue->consumer) ack 抵达消费者
配置机制
spring.rabbitma.publisher-confirms=true
spring.rabbitma.publisher-returns=true
spring.rabbitma.template.mandatory=true //异步返回 returns结果
//默认自动ack,不确定是否处理完
spring.rabbitmq.listener.simple.acknowledge-mode=manual
Config类中
定制RabbitTemplate,setConfirmCallBack
手动ack
Channel.basicAck
Channel.basicNack 不确认,要不要重新入队
channel.basicReject,拒绝,重新发送给其他处理
实际项目
是否配置了手动ack,手动ack是不是都是非批量