RabbitMq五种消息模型

MQ: Message queue 消息队列

MOM: Message Oriented Middleware 面向消息的中间件

两个主流实现方式:

JMS: java Message Server ,java消息服务,java规范类似jdbc:只能java语言实现 两种消息模型(点对点,发布订阅模式(比如微信公众号))

​ AMQP: Adviced Message Queue Protocol ,高级消息队列协议 本质协议,规范数据格式。 五种消息模型

​ 三个主要作用:

​ 异步处理

​ 应用解耦

​ 削峰填谷

四款主流mq产品

1、rocketMQ:apache 阿里贡献的

2.rabbitMQ:基于AMQP erlang(面向并发的语言)语言实现的

3.AcitveMq :apache 开源 基于JMS

4.kafka :大数据 吞吐量

RabbitMQ:

p: Producer 生产者,发送消息的应用程序

C:Consumer 消费者,接受并消费消息的应用程序

Q: queue 队列 接受、存储、转发消息

X: Exchange 交换机 接受、转发消息。 具体转发给哪些队列,取决去交换机类型

fanout类型:转发消息给所有队列

Direct:转发消息给RK符合的队列

Topic:RK支持通配符,*匹配一个词 #匹配任意多个

RK:RountingKey,路由键,生产者发送消息,队列绑定到交换机时,都可以指定Rk,只有Rk符合的队列才可以获取消息。

Channel:信道,默认一个链接有一个信道

Connection: 链接

如何避免消息堆积?

  • 能者多劳:channel.basicQos(prefetch: 1)

  • 多线程并发消费:concurrency。container启动的时候会根据设置的concurrency的值创建n个BlockingQueueConsumer。注意当队列的Exclusive(默认false)为true时,concurrency参数只能是1

  • 默认情况下消费者只有一个信道来获取消息,一个信道只有一个cpu来处理 但现在都是多核cpu

如何避免消息丢失?

  • 生产者确认机制:确保消息到达MQ

  • 消息持久化:确保不会因为MQ服务器宕机导致消息丢失

  • 消费者确认机制:确保消息被消费者正确无误的消费

确保以上3点,基本可以做到消息不丢失

生产者配置

spring:

rabbitmq:

host:192.168.231.100

port:5672

virtual-host:xxx

username:xx

password:xxx

publisher-confirm-type: simple #同步确认(阻塞) CORRELATED-异步确认

publiser-return:true #确认消息是否到达队列

消费者配置:

spring:

rabbitmq:

host:192.168.231.100

port:5672

virtual-host:xxx

username:xx

password:xxx

listener:

simple: # simple-listener容器使用一个额外线程处理消息 direct-listener(监听器)容器直接使用consumer线程

acknomledge-model: manual # 手动确认 auto自动 有异常就无限重试 none 不重试

prefetch:1 #能者多劳

concurrency:cpu核心数 #避免消息堆积,初始化多个消费者线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值