rabbitmq是非常主流的第三方消息队列,队列在解决高并发的时候是非常重要的角色,系统间解耦需要,高并发也需要,在很多生产者和消费者,队列一定会使用。
还有大数据领域使用的kafka。
rabbitmq是要解决高并发和系统间解耦人问题,实现的东西也是大多数队列都支持 的东西,叫AMQP高级消息队列协议,只要这个队列支持AMQP,都可以用这个库来连接你。
Erlang语言也是在go语言之前提过高并发场景下应用的语言。
rabbitmq文档很详细,支持各种文档都有,也跟它使用的AMQP协议一样
rabbitmq底层基于erlang语言写的,还要安装一些依赖,用这三个包,加上一些yum源就可以了
需要把rabbitmq的依赖放前面,让依赖先安装
这样rabbitmq单机版就安装完了
看看帮助
看看list里有什么
不管怎么安装都需要依赖
安装完可以rpm -ql列出所有的rabiitmq-server相关的东西
真正要启动服务的时候其实是启动这个
使用的配置都是在这个文件夹里
日志还有man文件
配置文件可以放在/etc/rabbitmq/rabbitmq
这是设定ip地址的
端口还是要记一下
dist_port也就是分布式port,集群服务内部通信用的,在上面当前port上+20000。默认变成了25672,内部通信使用
工作特性配置可以使用两种,一种是erlang语言的配置,一种是sysctl的配置,rabbitmq鼓励使用的
现在列出了这么多插件
我们需要使用换个来启动起来
这个启用相当于管理,它自己解决管理所依赖的其他插件,启用这些插件,这些服务就自动装载起来了,依赖agent,还依赖外部分发的
准备好插件就是启动服务了,在init.d里有rabbit-server,所以我们就用这个来启动
如果出现这样的问题,往往是.erlang.cookie权限不对
把属主属组给rabbitmq即可
服务启动后会提供三个端口,web端口是在5672+10000端口上,25672是内部通信用的
启动之后会创建这么个日志
5672一定要启动 ,不然编程没办法编,15672是web端口,25672是集群通信用的
默认有guest用户,密码也是guest,这个用户只能通过localhost访问
查看下帮助
<尖括号表示必须要给
这个命令也很重要,为某一个用户设置tag标签
这里是没有用户组的概念,用户组可以作为标签,标签其实就是用户组的意思,打标签就是授予某种用户角色
进不去是因为没有标签
授予管理员权限,也可以看下有什么标签
登录
每5秒刷新一次
overview概述
用 了多少文件描述符都可以看到
用amqp协议就需要用5672,25672集群内部通信用的,启动的插件在15672上
现在还没有一个在amqp链接上来的
这里还有通道的概念
交换机
这是消息队列
这是一个管理的地方,不仅仅是管理谁能进入到这个管理端,而且还能控制你能访问什么,最重要的就是它,它这里是有虚拟主机的概念
打开wayne用户
访问不能访问来设置
设置用户使用amqp,能够用哪个虚拟主机
加一个用户,刚才没有关联tag进不来
management,管理,用户只能访问管理插件
policymaker策略,能够访问管理策略,能够访问虚拟主机的参数
,monitoring监控,可以登录web看到监控
administrator管理元
这些事比较重要的用户相关命令
列出所有用户以及打印的tag
设置了tag,现在两个都是administrator
管理员权限比较打,几乎无所不能
根缺省为虚拟主机
这个/是缺省虚拟主机
可以进行管理
目前能访问只有guest
通过channel就可以链接到虚拟主机下的交换机
缺省的虚拟主机只能被guest的用户使用
rabbitmq官方提供了很多编程实例,生产者如何写,消费者如何写,代码拿过来直接用没有任何问题
支持这么多工作模式,前5种是需要掌握的
现在rabbitmq就是个server,提供了amqp协议的服务,这种就叫消息队列
还有一种名字叫broker,也就是中间人代理人意思
指的是物理链接
一个链接允许多个客户端链接
交换机可以接收发来的消息,就是发来的消息先经过它,消息到了虚拟主机后就要找到交换机了,然后通过交换机将消息按照一定规则传递给队列
发来的消息称为message,消息通过交换机按照指定的发布的规则direct,topic,fanout,通过这些规则来发这些消息,发给queue这些消息对列
queue是这些消息的存储载体,生产者把消息存储到消息队列里;消费者链接到服务端来,要链接到哪个虚拟主机下,哪个队列上,消息队列也是队列,一般是先进先出
交换机和队列并不相干,将队列bind绑定到交换机上就可以了,这样交换机才会将这些数据分发给消息队列
是一批交换机,消息队列,和相关对象的集合,也就是将交换机和消息队列放在虚拟主机里,而用户找虚拟主机。用户可以访问不同的虚拟主机,也就是这样将交换机和消息队列做了隔离,不同的用户访问不同的虚拟主机,也就是不同虚拟主机里的交换机和queue,互不干扰。
虚拟主机这个概念就是在逻辑层次上再做了一次隔离
server和broker,必须知道,说到消息队列,这个就是服务端,server跟生产者和消费者没关系,server=broker就是个中介,生产者将数据打入队列,消费者去队列拿数据消费数据,生产者和消费者要不要建立链接来这个broker,所以connection是需要的,提供 了channel概念,就是会话的概念,交换机是内部的东西,主要是消息如何路由,消息交给谁,把消息存到哪个queue里也需要路由。路由需要交换机来做。
大多数消息队列都叫消息,不管路由,最后需要存到队列,消费者去队列拿消息,这就是概念,内部提供了交换机和queue做绑定