热门标签 | 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



推荐阅读
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍了如何利用Go语言和WebSockets技术构建一个高效的实时聊天系统。随着网络应用的日益复杂化,实时交互成为了提升用户体验的关键要素之一。通过本指南,开发者可以学习到最新的技术和最佳实践。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • Google排名优化-面向Google(Search Engine Friendly)的URL设计 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
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社区 版权所有