赞
踩
目录
AMQP,即 Advanced Message Queuing Protocol (高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP
2007年Rabbit 技术公司基于AMQP 标准开发的 RabbitMQ1.0 发布。
RabbitMQ采用 Erlang 语言开发,Erlang 语言由 Ericson 设计,专门为开发高并发和分布式系统的一种语言,在电信领域使用广泛。
Brocker:接收和分发消息的应用(RabbitMQ Server)
Virtual host:逻辑分区的概念,类似于网络中的namespace,当多个不同用户使用同一个rabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等
Connection:publisher/consumer 和 broker 之间的TCP连接
Channel:如果每次访问RabbitMQ都建立Connection。在消息量大的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是connection内部建立的逻辑连接,如果应用程序支持多线程,每个thread创建单独的channel进行通信,AMQP method包含了channel id帮助客户端和message broke识别channel,所以channel之间完全是隔离的。channel作为轻量级的connection极大减少了操作系统建立TCP connection的开销。
Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去
Queue:消息最终被送到这里等待consumer取走
Binding:exchange和queue之间的虚拟连接,binding中包含了routing key,binding信息被包含到exchange查询表中,用户message分发依据
RabbitMQ 提供了6 种工作模式:简单模式、work queues、Publish/Subscribe 发布与订阅模式、Routing路由模式、Topics 主题模式、pC 远程调用模式(程调用,不太算 MQ;暂不作介绍)。
先创建两个模块一个生产者模块一个消费者的,然后分别引入rabbitMQ的依赖
前面连接跟生产者的一样,就接收消息的发方法不一样用下面这个
多个消费者共同消费同个队列的消息,他们两个只有一个能拿到消息
一个队列中如果有多个消费者,那么消费者之间对于同一个消息关系是竞争关系
应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理速度,比如发短信服务器部署多个,只需要一个交接点成功发送即可。
在订阅模型中,多了一个Exchange 角色,而且过程略有变化:
Exchange (交换机) 只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!
创建交换机的参数:
比如我们要让一个队列是发到保存数据库的,一个是输出控制台的,数据库只保存error,控制台都数据,这个时候就需要用到路由模式来匹配
路由模式要求队列在绑定交换机时要指定 routing key,消息会转发到符合 routing key 的队列。
类型交换机的类型要改成topics
Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是Topic 在配置routing key的时候可以使用通配符,显得更加灵活
写config配置类
发送消息,templates上要加@AutoWire注解
其他都和生产者一样的,就是做一个监听类,然后监听队列里的消息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。