RabbitMQ-基本概念(一)
整体架构模型

Producer
消息生产者,生产者创建消息然后发布到RabbitM中,消息一般包含2个部分 消息体(payload)和标签 消息体就是带有业务逻辑结构的数据,消息标签用来表述这条消息,比如交换器名称和路由键
生产者将消息交给RabbitMQ rabbItMQ会根据标签将消息投递到对应的消费组
队列
RabbitMQ的内部对象,用于存储消息 rabbitMQ不支持广播消息,当多个消费者订阅同一个队列,则会平均分摊到对应的消费者
Consumer
消费者,消费组连接到RabbitMQ并订阅到队列上,当消费一条消息只会消费消息体 标签会被丢弃
Exchange
交换器,生产者将消息投递到exchange exchange将消息路由到一个或者多个队列 如果路由不到可以返回给生产者或者直接丢弃exchange含有4种类型
fanout:将所有发送到该交换器的消息路由到所有与该交换器绑定的队列中(不需要经过binding key 路由 所以最快)
direct:将消息路由到routing key和binding key完全匹配的队列中
topic:direct是完全匹配 topic则是模糊匹配 如有路由键
路由键:*.rabbitmq.*可以路由:com.rabbitmq.client java.rabbitmq.demo
路由键:*.*.client 可以路由com.rabbitmq.client com.hiddent.client
路由键:com.#可以com.rabbitmq.client com.hiddent.client com.hiddent.demo
.分割的算一个但是 *表示模糊一个单词 #表示多个单词
比如*.rabbitmq.* 表示[任意一个单词].rabbitmq.[任意一个单词] com.test.rabbitmq.com 是不能路由的 因为rabbtimq左边有2个单词 com和test
headers,
不依赖于路由键盘的匹配规则来路由消息 而是根据发送消息内容中的headers属性进行匹配,在绑定队列和交换器时指定一组键值对,发送消息会获取headers的来进行路由匹配 效率很低 基本不会使用
RoutingKey
路由键,生产者将消息发给交换器的时候一般会指定一个routingKey用来指定这个消息的路由规则 routingKey需要和BidingKey联合使用才能生效
BindingKey
通过BidingKey将交换器与队列关联起来 交换器通过BindingKey知道路由到哪个队列上
理解
producer理解为包裹寄送人
exchange 理解为配送驿站
routing key 理解为配置驿站地址
binding key理解目的地址
复用Channel
发送消息和消费消息都需要1.创建连接再根据连接创建channel 跟java nio模型一样,复用连接多个生成者和多个消费者复用一个连接,避免为每个生产者和消费者都创建一个连接
但是要注意channel并不是线程共享的 需要为每个线程创建一个channel 不能a线程创建了channel进行发送消息 然后又给b线程发消息 b线程应该另外创建channel
什么是AMQP协议
上面的架构模型 生产者通过routing key投递消息到exchage exchage根据binding key 路由到队列 具体书26页
RabbitMQ-基本概念(一)的更多相关文章
- RabbitMQ基本概念和使用
RabbitMQ是一个消息代理,核心原理:发送消息,接收消息. RabbitMQ主要用于组件之间的解耦,消息发送者无需知道消息使用者的存在,反之亦然. 单向解耦 ...
- RabbitMQ如何工作和RabbitMQ核心概念
RabbitMQ是一个开源的消息代理软件.它接受来自生产者的消息并将其传递给消费者.它就像一个中间人,可以用来减少Web应用程序服务器的负载和交付时间. RabbitMQ如何工作 让我们简要介绍一下R ...
- RabbitMQ基本概念和原理
RabbitMQ基本概念和原理 1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. 2.Rabb ...
- rabbitMQ基本概念
一.网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二.rabbitMQ基本概念 Rab ...
- RabbitMQ 幂等性概念及业界主流解决方案
RabbitMQ 幂等性概念及业界主流解决方案 2019年01月24日 15:57:03 JAVA@架构 阅读数:506 一.什么是幂等性 可以参考数据库乐观锁机制,比如执行一条更新库存的 SQL ...
- RabbitMq基本概念理解
RabbitMQ的基本概念 RabbitMQ github项目地址 RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的 消息中间件 ...
- RabbitMQ总结概念
AMQP:一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计 http://www.diggerplus.org/archives/3110 AMQP ...
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- RabbitMQ 基本概念介绍-----转载
1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非 ...
- RabbitMQ核心概念篇
RabbitMQ介绍 一.RabbitMQ使用场景 RabbitMQ他是一个消息中间件,说道消息中间件[最主要的作用:信息的缓冲区]还是的从应用场景来看下: 1.系统集成与分布式系统的设计 各种子系统 ...
随机推荐
- php编译安装参数详解
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/loc ...
- React实战之60s倒计时按钮(发送短信验证按钮)
React实战之60s倒计时按钮——短信验证按钮 导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormI ...
- python中多线程(1)
一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 1.创建线程的开销比创建进程的开销小, ...
- Java多线程(二) synchronized 针对对象进行锁定
http://www.cnblogs.com/QQParadise/articles/5059824.html 1.方法内的变量为线程安全的 2.实例变量非线程安全的 public class Has ...
- POJ 3608 旋转卡壳
思路: 旋转卡壳应用 注意点&边 边&边 点&点 三种情况 //By SiriusRen #include <cmath> #include <cstdi ...
- DHTML_____window对象属性
<html> <head> <meta charset="utf-8"> <title>window对象属性</title&g ...
- Github 文件选择性上传
用过Github的人都知道.gitignore文件的存在,但是实际用起来还是有一些需要注意的地方,尤其是对于新手来说,稍不注意就会出错. 一.Github选择性忽略特定文件的方式 1.全局设置 一 ...
- [转]微信开发.Net 接入示例
本文转自:http://my.oschina.net/lcak/blog/219618 微信公众平台接口开发官方仅提供了 PHP 接入示例代码, 网上找到的.Net代码多半需要积分下载, 所以自己写了 ...
- java 对readLine扩展添加行号样式
java 的流的使用中,在字符缓冲输入流中,有一个每次读取一行数据的方法:readLine(): 在这里使用简单的继承方法对其继续扩展,使得返回每行前面添加序号 //需要导入的一些包 import j ...
- Spring(二) -- 春风拂面之 核心 AOP
”万物皆对象“是面向对象编程思想OOP(Object Oriented Programming) 的最高境界.在面向对象中,我一直将自己(开发者)放在一个至高无上的位置上,可以操纵万物(对象),犹如一 ...