热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMP入门

为什么80%的码农都做不了架构师?Step1.RabbitMP简介以AMQP协议RabbitMP简介以AMQP协议RabbitMP是开源的消息代理和队列服务器&

为什么80%的码农都做不了架构师?>>>   hot3.png

Step1.RabbitMP简介以AMQP协议

RabbitMP简介以AMQP协议

  • RabbitMP是开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMP底层是用了Erlang语言来编写的,并且rabbitMP是基于AMQP协议的.
  • RabbitMP不仅仅可以使用java客户端进行编写,且可以使用其他的语言(python,php等..),它提供了丰富的API


 RabbitMP的优点:

  • 开源,性能优秀,稳定性保障
  • 与SpringAMQP完美的整合,API丰富 (Spring基于RabbitMP 提供了一套框架,叫做AMQP框架)这套框架不仅提呈了原生的RabbitMP,而且还提供了丰富可扩张的API帮助开发人员更好的去应用
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
    说明:(保证数据不丢失的提前做到高可靠性,可用性)普遍使用的镜像队列模式
  • AMQP全称:Advanced Message Queuing Protocl  AMQP翻译过来:高级消息队列协议

AMQP模型图

  • Publisher(生产者)把消息投递到server上,然后经过Virtual host再到Exchange就可以了.
  • Consumer(消费者) 只需要和Messager Queue进行监听绑定就可以了,从而实现队列级别的结偶.
  • 生产者不需要关系我的消息投递到哪个队列,但消费者只需要监听队列就好了,它们的关系是通过路由进行关联的.
  • Exchange和Message Queue 之间有一个绑定的关系,然后通过路由key 关联,也就是说消息发到Exchange上通过某种路由规则,把消息路由到某一个队列上,这其实是RabbitMP的核心Publisher(生产者)把消息投递到server上,然后经过Virtual host再到Exchange就可以了.Consumer(消费者) 只需要和Messager Queue进行监听绑定就可以了,从而实现队列级别的结偶.生产者不需要关系我的消息投递到哪个队列,但消费者只需要监听队列就好了,它们的关系是通过路由进行关联的.
  • Exchange和Message Queue 之间有一个绑定的关系,然后通过路由key 关联,也就是说消息发到Exchange上通过某种路由规则,把消息路由到某一个队列上,这其实是RabbitMP的核心.

70794e624e0da774ebaaa0072402293b634.jpg

 

Step2.RabbitMP安装与使用

官网地址:http://www.rabbitmp.com/

安装软件开发包

$ yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz


下载安装包

$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm$ wget http://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm$ wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm


安装

说明:先需要安装erlang & scat,然后再安装rabbitmp-server,因为rabbitmp-server依赖socat

$ rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm$ rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm $ rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm


配置rabbitmp

$ vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app{loopback_users, [<<"guest">>]}, 修改为&#xff1a; {loopback_users, ["guest"]},


启动rabbitmp

$ rabbitmq-server start &#可以看到后台进程
$ lsof -i:5672
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam 16415 rabbitmq 49u IPv6 943337 0t0 TCP *:amqp (LISTEN)


查看rabbitmp 插件列表 &启动管理插件

#查看插件$ rabbitmq-plugins listConfigured: E &#61; explicitly enabled; e &#61; implicitly enabled| Status: * &#61; running on rabbit&#64;dong|/
[ ] amqp_client 3.6.5
[ ] cowboy 1.0.3
[ ] cowlib 1.0.1
[ ] mochiweb 2.13.1
[ ] rabbitmq_amqp1_0 3.6.5
[ ] rabbitmq_auth_backend_ldap 3.6.5
[ ] rabbitmq_auth_mechanism_ssl 3.6.5
[ ] rabbitmq_consistent_hash_exchange 3.6.5
[ ] rabbitmq_event_exchange 3.6.5
[ ] rabbitmq_federation 3.6.5
[ ] rabbitmq_federation_management 3.6.5
[ ] rabbitmq_jms_topic_exchange 3.6.5
[ ] rabbitmq_management 3.6.5
[ ] rabbitmq_management_agent 3.6.5
[ ] rabbitmq_management_visualiser 3.6.5
[ ] rabbitmq_mqtt 3.6.5
[ ] rabbitmq_recent_history_exchange 1.2.1
[ ] rabbitmq_sharding 0.1.0
[ ] rabbitmq_shovel 3.6.5
[ ] rabbitmq_shovel_management 3.6.5
[ ] rabbitmq_stomp 3.6.5
[ ] rabbitmq_top 3.6.5
[ ] rabbitmq_tracing 3.6.5
[ ] rabbitmq_trust_store 3.6.5
[ ] rabbitmq_web_dispatch 3.6.5
[ ] rabbitmq_web_stomp 3.6.5
[ ] rabbitmq_web_stomp_examples 3.6.5
[ ] sockjs 0.3.4
[ ] webmachine 1.10.3#启动管理插件$ rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled:mochiwebwebmachinerabbitmq_web_dispatchamqp_clientrabbitmq_management_agentrabbitmq_managementApplying plugin configuration to rabbit&#64;dong... started 6 plugins.


访问rabbitmp管理后台

http://106.12.100.44:15672/

username:guest password:guest

3111603b7ee1942a487685e2df5a2a5072e.jpg

登陆进来的界面

  • 在Info显示目前使用的disc&#xff08;磁盘&#xff09;存储&#xff0c;也可以改为使用内存&#xff0c;也就说收到消息存到内存中&#xff0c;这样的可以提升性能.在启动rabbitmp 加上--ram 即可改为内存存储 


9a3bddc09a95b3df6167b77d2422dd088bd.jpg


Step3:RabbitMP核心概念

RabbitMQ架构图

79781f3548a9fcb9eb0c78f19f2f0a0aaf3.jpg

AMQP核心概念

Server&#xff1a;又称Broker&#xff0c;接受客户端的连接&#xff0c;实现AMQP实体服务.
Connection:连接&#xff0c;应用程序与Broker的网络连接.
Channel&#xff1a;网络信道&#xff0c;几乎所有的操作都在Channel中进行&#xff0c;Channel是进行消息读写的通道. 客户端可建立多个Channel&#xff0c;每个Channel代表一个会话任务.
Message:消息&#xff0c;服务器应用程序之间传送的数据&#xff0c;由Properties和Body组成.Properties可以对消息进行修饰&#xff0c;比如消息的优先级以及延迟等高级特性&#xff1b;Body则就是消息体内容
Virtual Host&#xff1a;虚拟地址&#xff0c;用于进行逻辑隔离&#xff0c;最上层的消息路由&#xff0c;一个Virtual Host里面可以有若干个Exchange和Queue&#xff0c;同一个Virtual Host里面不能有相同名称的Exchange或Queue.
Exchange&#xff1a;交换机&#xff0c;接收消息&#xff0c;根据路由键转发消息到绑定的队列
Binding&#xff1a;Exchange和Queue之间的虚拟连接&#xff0c;Binding中可以包含routing key
Routing Key:一个路由规则&#xff0c;虚拟机可用它来确定如何路由一个特定消息
Queue&#xff1a;也称为Message Queue&#xff0c;消息队列&#xff0c;保存消息并将它们转发给消费者

RabbitMQ消息流转图

举例&#xff1a;生产者发送了一个消息给Message&#xff0c;指定了 exchange name叫做e1 ,正好Exchange 也叫做e1&#xff0c;指定一个routing key &#xff1a;123

消息规则路由过来&#xff0c;Message Queue 123 和routing key 123就匹配上了
 

08b6eaadc7f26569632133108890a1b50ca.jpg


转:https://my.oschina.net/AnnaWu/blog/2966181



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
author-avatar
色系迷人_777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有