zoukankan      html  css  js  c++  java
  • rabbitmq之基本原理及搭建单机环境

    1、RabbitMQ基本原理

    1、MQ全称Message Queue,是一种分布式应用程序的通信方法,是消费-生产者模型的典型代表,producer向消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。业务上可以实现:

    (1)项目之间的模块解耦,降低项目耦合度;

    (2)实现异步功能,如功能执行成功后发短信、发邮件等,当请求时间过长时,也可用于防止前端请求超时;

    (3)并发削峰,针对某一时刻突发性并发,可以先将producer生产的消息发送到队列中,consumer逐一取出消息进行消费,防止项目因并发量大卡顿;

    (4)日志处理;

    (5)消息通讯。

    2、AMQP

    RabbitMQ是基于AMQP协议实现的,AMQP相当于一个标准,全称Advanced Message Queue(高级消息队列协议)。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,不受产品、开发语言等条件的限制。

    3、vhost

    为什么要用虚拟主机?RabbitMQ server 可以说就是一个消息队列服务器实体(Broker),Broker当中可以有多个用户(增加用户的命令),而用户只能在虚拟主机的粒度进行权限控制,所以RabbitMQ中需要多个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机“/”。

    4、Queue

    队列是消息通信的基础模块

    (1)队列可以存储消息,在consumer未进行消费前,消息可存于队列中;

    (2)队列与交换机间通过routing_key绑定后,只能收到与routing_key对应的消息,可以起到消息归类作用。

    5、exchange

    交换机指定消息按不同的规则路由到不同的队列。可以将其理解成路由表。

    交换机可以存在多个,每个交换机在自己独立的进程中运行,增加多个交换机相当于增加多个进程,可以充分利用服务器上的CPU核以便达到更高的效率。

    交换机四种类型:

    (1)Fanout

    广播模式,不需要routing_key将exchange和queue进行绑定,直接将exchange内的消息发送给所有queue,类似微信公众号的订阅功能,只要订阅此公众号,就会收到公众号发布的所有消息

    (2)direct

    直联模式,通过精确匹配消息的路由关键字,将消息路由到零个或者多个队列中,绑定关键字用来将队列和交换器绑定到一起。这让我们可以构建经典的点对点队列消息传输模型,不过和任何已定义的交换器类型一样,当消息的路由关键字与多个绑定关键字匹配时,消息可能会被发送到多个队列中。

    (3)topic

    主题模式,处理路由键,按模式匹配路由键。模式符号 "#" 表示一个或多个单词,"*" 仅匹配一个单词。如 "wood.#" 可匹配 "wood.palm.redwood",但 "wood.*" 只匹配 "wood.deadwood"。 

    主题式交换器类型提供了这样的路由机制:通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中。这种路由器类型可以被用来支持经典的发布/订阅消息传输模型——使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。

    (4)headers(未使用过此种模式,略)

    6、bind

    绑定器可以交换机和队列串联起来,交换机通过绑定器可以将消息路由到指定的队列中,可以将将绑定器理解为路由器的路由规则

    7、RabbitMQ特点

    (1)可靠性

    rabbtimq使用一些机制保证可靠性,防止消息丢失,如:持久化机制、消息确认机制等

    (2)集群模式

    多个rabbitmq服务器可以组成一个集群,防止服务down掉影响项目运行

    (3)高可用

    队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

    (4)管理界面

    提供强可视化管理界面,即使不熟悉MQ原理的开发人员也可以通过可视化管理界面进行MQ的相关操作

    8、防止消息丢失逻辑图

    防止MQ中消息丢失一直被开发人员广泛关注,MQ内部持久化机制可以防止消息丢失,但是同时也会降低MQ性能,因此需要在代码逻辑中进行部分相关处理

     2、搭建单机MQ

    1、安装erlang

    yum -y install erlang 

    2、安装rabbitmq

    yum install -y rabbitmq-server

    3、安装插件

    启动web管理界面
    rabbitmq-plugins enable rabbitmq_management
     
    增加访问用户,默认用户guest只能本地访问。
    rabbitmqctl add_user admin 123456
     
    设置角色: 
    rabbitmqctl set_user_tags admin administrator
     
    设置默认vhost(“/”)访问权限
    rabbitmqctl set_permissions -p "/" admin "." "." ".*"
     
    浏览器访问:http://IP:15672
    用户名admin,密码123456进行登录
  • 相关阅读:
    ibatis常用sql
    在eclipse中部署maven项目的问题
    如何成为一个设计师和程序员混合型人才
    一个程序员的读书笔记:程序设计的反思
    C# 中的 == 和 equals()有什么区别?
    2014百度之星资格赛解题报告:能量变换
    2014百度之星资格赛解题报告:Xor Sum
    2014百度之星资格赛解题报告:Labyrinth
    那些年我们一起追过的ACM
    最新全球排名前50网站前端开发语言统计
  • 原文地址:https://www.cnblogs.com/jindp/p/10741803.html
Copyright © 2011-2022 走看看