yxixi 发表于 2019-2-17 06:11:42

Centos7 上安装配置 RabbitMQ

  一、安装Erlang环境
  网上百度了不少安装erlang的教程,大部分都是安装到一半就他丫的翻车了,搞得我好心累
https://images2018.cnblogs.com/blog/1094658/201803/1094658-20180306182314294-779994356.png 
  1、在安装erlang之前先安装下依赖文件(这一步不要忘掉了, 不然后面./configure的时候要报错):
  # yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto
  2、到erlang官网去下载erlang安装包
  官网地址:http://www.erlang.org/downloads
  作为一名强迫症患者,我当然是选择现在最新版本啦。右键复制连接地址,用wget进行下载
  # wget -c http://erlang.org/download/otp_src_20.2.tar.gz
https://images2018.cnblogs.com/blog/1094658/201803/1094658-20180306181307918-607684323.png
  接下来解压:
  # tar -zxvf otp_src_20.2.tar.gz
  # cd otp_src_20.2/
  3、编译安装( 我这里指定编译安装后放在/usr/local/erlang目录里面,这个你们可以改成其他的 ):
  # ./configure --prefix=/usr/local/erlang
  # make && make install
  4、测试安装是否成功:
  # cd /usr/local/erlang/bin/
  # ./erl
  若出现以下界面,则说明我们erlang配置OK了
https://images2018.cnblogs.com/blog/1094658/201803/1094658-20180306185525412-1764014894.png
  输入 halt().退出控制台, 注意,halt后面有个点哈
  5、配置环境变量(ps:这个跟java的环境变量配置是差不多的)
  # vim /etc/profile
  在末尾加入这么一行即可:export PATH=$PATH:/usr/local/erlang/bin 
  更新配置文件:# source /etc/profile
  更新之后在任意地方输入erl能进入命令行, 那么就说明配置成功了。
  接下来进入我们的核心部分:配置rabbitmq
  二、安装rabbitmq
  1、到官网下载最新安装包:http://www.rabbitmq.com/releases/rabbitmq-server/
  # wget -c http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-generic-unix-3.6.15.tar.xz
  解压:
  # xz -d rabbitmq-server-generic-unix-3.6.15.tar.xz
  # tar -xvf rabbitmq-server-generic-unix-3.6.15.tar
  2、配置rabbitmq的环境变量(这个跟上面的erlang配置以及java的环境变量差不多)
  # vim /etc/profile
  在末尾加入以下配置:export PATH=$PATH:/usr/local/rabbitmq_server-3.6.15/sbin
  更新配置文件:# source /etc/profile
https://images2018.cnblogs.com/blog/1094658/201803/1094658-20180307001331015-1125381562.png
  3、rabbitmq的基本操作:
  启动:rabbitmq-server -detached
  关闭:rabbitmqctl stop
  查看状态:rabbitmqctl status
  4、配置rabbitmq网页管理插件
  启用插件:root@iZwz9eailk2tci1wywk9p2Z local]# rabbitmq-plugins enable rabbitmq_management
  访问管理页面:http://192.168.?.?:15672端口默认为15672
https://images2018.cnblogs.com/blog/1094658/201803/1094658-20180307003942985-813072985.png
  默认来宾用户:guest, 来宾用户密码:guest
  5、开启rabbitmq远程访问
  添加用户:rabbitmqctl add_user XRom XRom123  //XRom是用户名, XRom123是用户密码
  添加权限:rabbitmqctl set_permissions -p "/" XRom ".*" ".*" ".*"
  修改用户角色:rabbitmqctl set_user_tags XRom administrator
  然后就可以远程访问了,然后可直接配置用户权限等信息
  6、rabbitmq常用命令
  add_user         
  delete_user   
  change_password
  list_users
  add_vhost   
  delete_vhost
  list_vhostsset_permissions[-p ]   
  clear_permissions [-p ]
  list_permissions[-p ]
  list_user_permissions
  list_queues    [-p ] [ ...]
  list_exchanges [-p ] [ ...]
  list_bindings[-p ]
  list_connections [ ...]
2.3 RabbitMQ添加用户和Virtual Host
  Admin-Users-Add a user
https://img-blog.csdn.net/20170420161301897?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  Tags:用户角色说明
  超级管理员(administrator)
  可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  监控者(monitoring)
  可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  策略制定者(policymaker)
  可登陆管理控制台, 同时可以对policy进行管理,但无法查看节点的相关信息。
  普通管理者(management)
  仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
  其他none
  无法登陆管理控制台,通常就是普通的生产者和消费者。
  Admin-Virtual Host-Add virtual host
https://img-blog.csdn.net/20170420161317577?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  添加virtual host和用户后,需要为用户指定virtual host,之后用该用户可以登录
https://img-blog.csdn.net/20170420161335492?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.RabbitMQ的5种模式与实例
3.1 简单模式Hello World
https://img-blog.csdn.net/20170420161349445?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  功能:一个生产者P发送消息到队列Q,一个消费者C接收
  生产者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel向队列中发送消息,关闭通道和连接。
https://img-blog.csdn.net/20170420161419296?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  消费者实现思路
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue, 创建消费者并监听队列,从队列中读取消息。
https://img-blog.csdn.net/20170420161433202?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.2 工作队列模式Work Queue
https://img-blog.csdn.net/20170420161444853?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  功能:一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列
  任务队列:避免立即做一个资源密集型任务,必须等待它完成,而是把这个任务安排到稍后再做。我们将任务封装为消息并将其发送给队列。后台运行的工作进程将弹出任务并最终执行作业。当有多个worker同时运行时,任务将在它们之间共享。
  生产者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel向队列中发送消息,2条消息之间间隔一定时间,关闭通道和连接。
https://img-blog.csdn.net/20170420161457337?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  消费者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,创建消费者C1并监听队列,获取消息并暂停10ms,另外一个消费者C2暂停1000ms,由于消费者C1消费速度快,所以C1可以执行更多的任务。
https://img-blog.csdn.net/20170420161509416?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.3 发布/订阅模式Publish/Subscribe
https://img-blog.csdn.net/20170420161521213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  功能:一个生产者发送的消息会被多个消费者获取。一个生产者、一个交换机、多个队列、多个消费者
  生产者:可以将消息发送到队列或者是交换机。
  消费者:只能从队列中获取消息。
  如果消息发送到没有队列绑定的交换机上,那么消息将丢失。
  交换机不能存储消息,消息存储在队列中
  生产者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel创建交换机并指定交换机类型为fanout,使用通道向交换机发送消息,关闭通道和连接。
https://img-blog.csdn.net/20170420161531479?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  消费者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,绑定队列到交换机,设置Qos=1,创建消费者并监听队列,使用手动方式返回完成。可以有多个队列绑定到交换机,多个消费者进行监听。
https://img-blog.csdn.net/20170420161544448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.4 路由模式Routing
https://img-blog.csdn.net/20170420161557922?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  说明:生产者发送消息到交换机并且要指定路由key,消费者将队列绑定到交换机时需要指定路由key
  生产者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel创建交换机并指定交换机类型为direct,使用通道向交换机发送消息并指定key=b,关闭通道和连接。
https://img-blog.csdn.net/20170420161609922?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  消费者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,绑定队列到交换机,设置Qos=1,创建消费者并监听队列,使用手动方式返回完成。可以有多个队列绑定到交换机,但只要绑定key=b的队列key接收到消息,多个消费者进行监听。
https://img-blog.csdn.net/20170420161623058?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
3.5 通配符模式Topics
https://img-blog.csdn.net/20170420161633797?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  说明:生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配;符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor
  符号*:只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor
  生产者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel创建交换机并指定交换机类型为topic,使用通道向交换机发送消息并指定key=key.1,关闭通道和连接。
https://img-blog.csdn.net/20170420161646562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
  消费者实现思路:
  创建连接工厂ConnectionFactory,设置服务地址127.0.0.1,端口号5672,设置用户名、密码、virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,绑定队列到交换机,设置Qos=1,创建消费者并监听队列,使用手动方式返回完成。可以有多个队列绑定到交换机,凡是绑定规则符合通配符规则的队列均可以接收到消息,比如key.*,key.#,多个消费者进行监听。
https://img-blog.csdn.net/20170420161658063?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
4.spring集成rabbitmq配置
  Spring提供了AMQP的一个实现,并且spring-rabbit是RabbitMQ的一个实现,下面给出订阅者模式的事例配置如下:
https://img-blog.csdn.net/20170420161709344?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnlzdWNjZXNz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
5.总结
  RabbitMQ提供了6种模式,分别是HelloWorld,Work Queue,Publish/Subscribe,Routing,Topics,RPC Request/reply,本文详细讲述了前5种,并给出代码实现和思路。其中Publish/Subscribe,Routing,Topics三种模式可以统一归为Exchange模式,只是创建时交换机的类型不一样,分别是fanout、direct、topic。Spring提供了rabbitmq的一个实现,所以集成起来很方便,文章第4章给出了订阅者模式的一种spring配置。
  欢迎大家关注博主订阅号“Java技术日志”,提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。
  参考:https://www.linuxidc.com/Linux/2016-03/129557.htm
  本文出自https://www.cnblogs.com/xrog/p/8519967.html

页: [1]
查看完整版本: Centos7 上安装配置 RabbitMQ