版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、RabbitMQ-AMQP-0-9-1模型详解Vhost创建方式:命令行工具来创建: rabbitmqctl add_vhost qa1管理 台创建ConnectionSpring CachingConnectionFactory默认情况下 单连接的连接工厂。默认,首先会缓存一个Channel,然后再慢慢增 ,高并发使用场景、channelCacheSize 设置缓存的数量 100默认的缓存模式是缓存通道。如果把缓存模式设为CacheMode.CONNECTION,则缓存连接以及连接上创建Channel. connectionCacheSize 属性设置缓存多少个连接CacheMode.CON
2、NECTION 与 Rabbit Admin ( AmqpAdmin) 不兼容, 自动创建exchange、queues 等exchangeExchange.DeclareOk exchangeDeclare(String exchange, String type,boolean durable, / 交换器是否持久化 避免重启后,要再次创建。 和消息的持久化没关系。boolean aut ete, / 当没有队列绑定到它时 是否自动删除boolean internal, / 是否是 MQ 的, 我们就不能在客户端中使用。Map<String, Object> arguments
3、)QueueName 应用程序可以选择队列名称,或者要求 为它们生成一个名称,最长 255 字节 UTF-8字符。如想要Broker为我们生成队列名,可以在 创建Queue时传入空字符"",在返回值中可以取得生成的队列名。Durable 是否持久 ,如为false, broker restart就没有了Exclusive 独占,被一个connection独占使用,当connection 关闭时Queue也被删除Aut ete 是否在Queue的最后一个消费者关闭时自动删除QueueArguments 可选的 件和Broker特殊特性使用的参数,如message TTL, q
4、ueue length limit等【注意】以amq.开头的队列名称 是保留给Broker 的,如果用户创建这样的队列会异常。【注意】队列的持久性,跟消息的持久化也没关系。Queue 的 TTL TIME TO LIVEaut ete 队列空闲一段时间之后再删除。policy方式expiry 策略名称 自定义".*" 作用目标名称的正则表达式'"expires":1800000' 策略定义 过期时间设置 毫秒-apply-to queues 应用于哪一类实体代码中 队列是指定Map<String, Object> args =
5、 new HashMap<String, Object>(); args.put("x-expires", 1800000); channel.queueDeclare("myqueue", false, false, false, args);channel.queueDeclare("queue1", false, false, false, args);Publisher路由不可达可能情况:交换没有绑定队列交换没法根据消息的路由key把消息路由到队列。默认情况: 消息丢弃rabbitmqctl set_policy
6、expiry ".*" '"expires":1800000' -apply-to queues可以的处理办法:退回死信队列(备用交换)退回void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte body)mandatory:true 强制退回, false 不需退回,直接丢弃。备用交换policy代码中 交换时通过参数指定备用交换一定要去动手事务机制可靠发布spring 事务管理需要那些组件?
7、/ 参数Map<String, Object> args = new HashMap<String, Object>(); args.put("alternate-exchange", "my-ae"); /备用交换参数指定channel.exchangeDeclare("my-direct", "direct", false, false, args); channel.exchangeDeclare("my-ae", "fanout"); chan
8、nel.queueDeclare("routed");channel.queueBind("routed", "my-direct", "key1"); channel.queueDeclare("unrouted"); channel.queueBind("unrouted", "my-ae", "");rabbitmqctl set_policy mike "my-direct$" '"alte
9、rnate-exchange":"my-ae"'事务管理器 TransactionManagerConfigurationpublic class TxConfiguration Bean / 配置事务管理器public RabbitTransactionManager rabbitTransactionManager(ConnectionFactory connectionFactory) return new RabbitTransactionManager(connectionFactory);在spring 该怎么玩事务就怎么玩.RabbitTra
10、nsactionManager 只能做Rabbitmq的消息事务管理 只能是单连接的连接工厂没有分布式事务管理器实现。rabbitmq中事务机制来保证消息的可靠发布,性能是比较差发布确认机制性能是事务机制的250倍。发布者发布消息,一般是走异步。channel有三种确认模式异步流式确认 驱动 开销低,吞吐量大批量发布确认 批次等待,确认不ok 一批重发单条确认 就等待确认broker给出确认会有三种结果ack 接收nack 接收失败发布者收不到Broker的确认(超时)异步流式确认Consumer两种消息消费模式push 推模式pull 拉模式push 模式说明broker client 消费
11、者client 向 broker 对某个队列的消费者/ 对感 的队列 消费者,返回Server生成的consumerTag(消费者标识)String consumerTag = channel.basicConsume(queueName, true, callback, consumerTag-> );取消消费者channel.basicCancel(consumerTag);独占消费者独占队列:被创建它的连接独占 这个连接上的channel 可以共享。连接关闭,独占队列没有了。独占消费者:消费者独占一个对队列进行消息消费,适用场景: 消息一定要严格按序消费处理。消费者优先级x-pri
12、orityMap<String, Object> args = new HashMap<String, Object>(); args.put("x-priority", 10); / 整数,数值越大优先级越高。 默认 0 channel.basicConsume("my-queue", false, args, consumer);prefetch 20Broker 轮询 , 同优先级时是轮询 消息优先发给优先级高的消费者,直到prefetch满了 或 block.消息确认消息传递的模式(确认)Automatic 自动 送货无需
13、确认Manual 手动 需要客户签收手动确认的情况 和prefetch 配合使用prefetch spring中默认值为: 250手动确认的3个操作basic.ack 用于正面确认,消费者确认消息被妥善处理,broker可以移除该消息了。basic.nack 用于 确认,扩展了basic.reject,以支持批量确认。是RabbitMQ对AMQP-0-9-1的扩展。basic.reject 用于 确认确认,可以指示Broker 移除消息以及是否重发。/ 批量Nack,并重发GetResponse gr1 = channel.basicGet("some.queue", fa
14、lse); GetResponse gr2 = channel.basicGet("some.queue", false);channel.basicNack(gr2.getEnvelope().getDeliveryTag(), true, true); /第二个参数true表示批量Pull 拉模式消费/usr/lib/rabbitmq/plugins/安全guest用户管理guest guest改 或删除guest用户。rabbitmqctl delete_user guestrabbitmqctl change_password guest newpassVhost
15、(exchagne queue) 用户: exchange、queue权限:RabbitMQ区分了对 的congure(配置)、write(写)和read(读)操作。congure操作:指创建或销毁 ,或更改它们的行为。write 写操作:将消息注入到 中。read操作:从 中 消息。rabbitmqctl set_permissions -p vhost user conf write read-p vhost 指定 vhost 不指定则默认为 "/" vhost。user 要设置的用户conf 匹配 名称的正则表达式,授予用户哪些 的配置权限。write 匹配 名称的正
16、则表达式,授予用户哪些 的写权限。read 匹配 名称的正则表达式,授予用户哪些 的读权限。rabbitmqctl set_permissions -p my-vhost mike “mike-.*” “.*” “.*”channel.exchangeDeclare("aaaaa") 不可以创建 交换 队列 删除 congure绑定 读写 发消息 写消费消息 读具体操作需要的权限说明表topic 权限设置用户对topic类型的交换器的消息权限rabbitmqctl set_topic_permissions -p vhost user exchange write read
17、AMQP 0-9-1 Operationcongurewritereadexchange.declare(passive=false)exchangeexchange.declare(passive=true)exchange.declare(with AE)exchangeexchange (AE)exchangeexchange.deleteexchangequeue.declare(passive=false)queuequeue.declare(passive=true)queue.declare(with DLX)queueexchange (DLX)queuequeue.deletequeueexchange.bindexchange (destination)exchange (source)exchange.unbindexchan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024展览会场保安服务与展览会期间卫生防疫合同3篇
- 2024年度商标专用权转让及许可使用合同协议3篇
- 2024年度职业院校校服定制及学生制服配套服务合同3篇
- 部队训练安全教案
- 防火安全巡查和检测的重要性
- 2023年新七年级历史开学分班自学反馈拔高题检测卷(解析版)
- 2023-2024学年初中九年级上学期期末道法试题及答案
- 2024年茶艺师(四级)理论知识考试题库(附答案)
- 签订保险协议合同范例
- 商铺乙方解约合同范例
- GB/T 26470-2011架桥机通用技术条件
- 横版介绍信(带存根打印版)
- 胃脘痛中医护理方案-课件
- 《大学生职业发展与就业指导》第二章自我认知
- 气压治疗仪的使用方法课件
- 最新营销中心物业服务可视化操作指引说明详解新实用手册
- 食材配送投标服务方案
- 排污许可证守法承诺书(2篇)
- 矩形顶管施工方案28
- 液压转向器厂总平面布置课程设计
- 说明性语段的压缩(课堂PPT)
评论
0/150
提交评论