课件rabbitmq amqp091模型详解上课笔记_第1页
课件rabbitmq amqp091模型详解上课笔记_第2页
课件rabbitmq amqp091模型详解上课笔记_第3页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论