当前位置:   article > 正文

rabbitMQ知识概括_rabbitmq 端口

rabbitmq 端口

MQ简介

基于多线程队列简单实现mq:

public class MayiktThreadMQ {
   
    /**
     * Broker
     */
    private static LinkedBlockingDeque<JSONObject> broker = new 
    LinkedBlockingDeque<JSONObject>();

    public static void main(String[] args) {
   
        // 创建生产者线程
        Thread producer = new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                while (true) {
   
                    try {
   
                        Thread.sleep(1000);
                        JSONObject data = new JSONObject();
                        data.put("phone", "18611111111");
                        broker.offer(data);
                    } catch (Exception e) {
   

                    }

                }
            }
        }, "生产者");
        producer.start();
        Thread consumer = new Thread(new Runnable() {
   
            @Override
            public void run() {
   
                while (true) {
   
                    try {
   
                        JSONObject data = broker.poll();
                        if (data != null) {
   
                            System.out.println(Thread.currentThread().getName() 
                            + ",获取到数据:" + data.toJSONString());
                        }
                    } catch (Exception e) {
   

                    }
                }
            }
        }, "消费者");
        consumer.start();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

基于netty实现mq:

  • 消费者netty客户端与nettyServer端MQ服务器端保持长连接,MQ服务器端保存消费者连接。
  • 生产者netty客户端发送请求给nettyServer端MQ服务器端,MQ服务器端在将该 消息内容发送给消费者。
  • 生产者投递消息给MQ服务器端,MQ服务器端需要缓存该消息。
    在这里插入图片描述
  • 消息格式:body:{"msg":{"userId":"123456","age":"23"},"type":"producer",”topic”:””}
  • 如果mq服务器端宕机之后,消息如何保证不丢失?
    持久化机制。
  • 如果mq接收到生产者投递消息,如果消费者不在的情况下,该消息是否会丢失?
    不会丢失,消息确认机制 必须要消费者消费该消息成功之后,在通知给mq服务器端 删除该消息。
  • Mq服务器端将该消息推送消费者:
    ①消费者已经和mq服务器保持长连接,服务器自动推送
    ②消费者第一次刚启动的时候,消费者主动拉取消息
  • Mq如何实现抗高并发思想?
    Mq消费者根据自身能力情况 ,拉取mq服务器端消息消费。
    默认的情况下是取出一条消息。
    缺点:存在延迟的问题
  • 如何消费者提高速率:
    消费者实现集群。
    消费者批量获取消息即可。
  • 总结:
    rabbitMQ的总体架构思想就是使用Netty的NIO模型通信。
    生产者和消费者操作时首先要向消息中间件进行连接操作。
    也就是说生产者和消费者相对于消息中间件都是Client,而消息中间件是Server。

RabbitMQ简介

RabbitMQ介绍:

  • RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),
  • RabbitMQ服务器是用Erlang语言编写的。
  • 链接:
    RabitMQ官方网站
    RabbitMQ概念详解

RabbitMQ基础概念:

  • 通常我们谈到消息队列服务, 会有三个概念: 发消息者、消息队列、收消息者。RabbitMQ 在这个基本概念之上, 多做了一层抽象,在发消息者和队列之间, 加入了交换器(Exchange)。这样发消息者和消息队列就没有直接联系,转而变成发消息者把消息发给交换器,交换器根据调度策略再把消息转发给消息队列。
  • 消息生产者并没有直接将消息发送给消息队列,而是通过建立与Exchange的Channel,将消息发送给Exchange。Exchange根据路由规则,将消息转发给指定的消息队列。消息队列储存消息,等待消费者取出消息。消费者通过建立与消息队列相连的Channel,从消息队列中获取消息。
  • 概念名词:
    Channel(信道):多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,复用TCP连接的通道。每个channel表示一个会话任务。
    Producer(消息的生产者):向消息队列发布消息的客户端应用程序。
    Consumer(消息的消费者):从消息队列取得消息的客户端应用程序。
    Message(消息):消息由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(消息优先权)、delivery-mode(是否持久性存储)等。
    Routing Key(路由键):消息头的一个属性,用于标记消息的路由规则,决定了交换机的转发路径。最大长度255 字节。
    Queue(消息队列):存储消息的一种数据结构,用来保存消息,直到消息发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将消息取走。需要注意,当多个消费者订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,每一条消息只能被一个订阅者接收。
    Exchange(交换器|路由器):提供Producer到Queue之间的匹配,接收生产者发送的消息并将这些消息按照路由规则转发到消息队列。交换器用于转发消息,它不会存储消息 ,如果没有 Queue绑定到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。交换器有四种消息调度策略(下面会介绍),分别是fanout, direct, topic, headers。
    Binding(绑定):用于建立Exchange和Queue之间的关联。一个绑定就是基于Binding Key将Exchange和Queue连接起来的路由规则,所以可以将交换器理解成一个由Binding构成的路由表。
    Binding Key(绑定键):Exchange与Queue的绑定关系,用于匹配Routing Key。最大长度255 字节。
    Broker:RabbitMQ Server,服务器实体。
    在这里插入图片描述
  • 关系:
    ①Producer与Exchange之间为一对多关系
    ②Exchange与Queue之间为多对多关系
    ③Queue与Consumer之间为多对多关系

RabbitMQ环境的基本安装:

  • 下载并安装erlang:
    ①链接:erlang下载地址
    ②配置erlang环境变量信息:
    <1>新增环境变量ERLANG_HOME=erlang的安装地址。
    <2>将%ERLANG_HOME%\bin加入到path中。
    ③cmd下用erl -version检测是否配置成功。
  • 下载并安装RabbitMQ
    ①链接:RabbitMQ下载地址
    ②配置环境变量:
    <1>新增环境变量RABBIT_HOME=rabbitmq的安装地址。
    <2>将%RABBIT_HOME%\sbin加入到path中。
    ③cmd下进入RabbitMQ Server目录下的sbin目录,用rabbitmqctl status检测RabbitMQ是否配置成功
    ④打开sbin目录,双击rabbitmq-server.bat即可启动rabbitmq。
    ⑤如果rabbitmq启动成功无法访问管理平台页面:
    <1>进入到F:\path\rabbitmq\rabbitmq\rabbitmq_server-3.6.9\sbin>
    <2>执行rabbitmq-plugins enable rabbitmq_management
  • Rabbitmq管理平台中心:
    ①地址 :http://127.0.0.1:15672
    ②默认账号:guest/guest ,用户可以自己创建新的账号。
  • 注意:RabbitMQ 它依赖于Erlang,需要先安装Erlang。不同JDK版本对应的Erlang和RabbitMQ Server的版本也会有所不同。

RabbitMQ常见名词:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/558361
推荐阅读
相关标签
  

闽ICP备14008679号