rabbitmq学习之:(一)初识、概念及心得

首先,装好RMQ,且激活了Web管理服务以后(须要先暂停服务,而后重启,看帖子),就能够经过http://localhost:15672来访问了(用户名/密码是:guest/guest,这个虽然叫guest可是确实超级管理员权限)。服务器


这个网页其实颇有意思,到目前为止,我以为很是有用的内容是,他里面能够看到你声明的Queue,Exchange,RoutingKey(这个要点击某个Exchange才能看到)。看到这些有什么用呢?最重要的一点就是,他们是真实存在的!并且存在于RMQ服务器上!不存在于Producer,也不存在于Consumer。换句话说,他们不会随着你的程序的消亡而消亡!(固然你程序让他们死,他们固然会死,我指的是通常状况。)好,在展开一下,假如你的程序里面声明了一个不会自动消亡的Queue和一个Exchange,那么第一次运行,这2个对象就被建立出来了,那么他们就永远存在,第二次运行,你就没必要再声明了。这就是为何,RabbitMQ.Client里面某些参数都是字符串,而不是通常类库的对象实例。spa


那个做者其实没有明确交代清楚几个基本的概念:orm

  1. Consumer是直接从Queue里面取消息的,不用通过Exchange。这点要牢记,并且从全部取消息的API,只接受Queue的名字,就能够印证。对象

  2. Producer要发送消息,是不能直接往Queue里面发的,必须通过Exchange,并且发消息必定要指定RoutingKey。这个也能够从发消息的API获得印证。字符串

  3. Exchange和Queue(能够一对多)彼此是经过RoutingKey这条“纽带”来绑定的!Exchange、RoutingKey、Queue这三者关系紧密。这个也要牢记!发消息的时候,须要指定的是Exchange和RoutingKey,没法指定Queue。这个很Make Sense吧!有点像MVC的关系(Producer是Model,将消息(with RoutingKey)传给Exchange,Exchange是Controller来派发消息到指定的Queue(s))。it

  4. Exchange有4种类型:Direct、Fanout、Topic、Headers。这个看后面4张图就基本能够了解。io

  5. RMQ提供了一个默认的Exchange,名字是空字符串。他是Direct类型的,绑定到全部的Queue(并且每个Queue和这个无名Exchange之间的RoutingKey是Queue的名字)。那个做者是这样说的:每当你声明了一个Queue,就会有一个默认的Exchange。我也不知道他说的对不对,反正就有那么一个默认的Exchange就对了。这个不用你显式声明(就存在)就对了。权限


这里贴一下PEQC关系图:程序

这里贴一下Exchange4种类型:Direct、Fanout、Topic、Headers。密码

做者心得:

1. 在建立ConnectFactory时,咱们能够传入主机名、端口号、用户名/密码、虚拟Host等参数。

2. 也可使用ampq://用户名:密码@主机名:端口号/%2f

3. Channel是轻量级的TCP/IP链接, 而Connection是很是Expensive的。

4. 消息不是直接发到Queue的,而是Producer经过Exchange来发送的。

5. 每当声明一个Queue时,会自动绑定到默认的Exchange上。并且不能解绑、不能删除、不能显式声明,只能用来发消息。

相关文章
相关标签/搜索