关于java:分布式消息中间件-RabbitMQ入门

54次阅读

共计 3099 个字符,预计需要花费 8 分钟才能阅读完成。

一、前言

上一篇【分布式消息中间件 – 概述】中,咱们次要介绍了音讯队列(Message Queue,简称 MQ)的利用场景和基本原理。MQ 是对音讯队列(文章中也叫消息中间件)的统称。业界支流的消息中间件次要有:RabbitMQ、ActiveMQ、Kafka、RocketMQ 等。为不便学习,本大节次要通过 RabbitMQ 作为音讯队列入门级介绍。

二、大纲

  • RabbitMQ 原理介绍
  • RabbitMQ 装置配置
  • RabbitMQ 入门程序

三、内容

1、RabbitMQ 原理介绍

官网:https://www.rabbitmq.com/

RabbitMQ 是一个 Erlang 语言开发的基于 AMQP 协定的开源实现。次要用来暂存并转发 ** 音讯 **(Message)。就像一个快递点,能够寄快递,也能够取快递。

其具体特点包含:

  • 反对多种语言
  • 反对多种协定
  • 反对集群部署
  • 反对插件扩大
  • 高可用性
  • ……

其整体架构如图所示:

根底概念:
Message(音讯):由音讯头和音讯体形成(快递单)
Publisher(音讯生产者):发送音讯到交换器(发快递)
Exchanger(交换器):接管生产者发送的音讯并 路由 给服务器队列(发到哪)
Binding(绑定):连贯交换器和音讯队列的路由规定(物流路线)
Queue(音讯队列):音讯容器,用于音讯贮存和转发给消费者(快递代理点)
Connection(网路连贯):如建设一个 TCP 连贯(打联系电话)
Channel(信道):多路复用的虚构 TCP 连贯。缩小操作系统 TCP 的建设和销毁(快递小哥打你电话)
Consumer(音讯消费者):从队列中获取音讯的客户端应用程序(取快递)

我想,把这个音讯生产和生产的过程比作生存实例 (快递) 会更容易了解。官网上的介绍绝对简略。而对于开发者来说, 能够将它了解为由三局部组成:(请读者认真研读图中标记红色的局部)

2、RabbitMQ 装置和配置

(1)材料获取

因为 RabbitMQ 是基于 Erlang 语言开发的,因而须要先装置 Erlang。为方便使用,(贴心)作者已整顿:
Erlang:
链接:https://pan.baidu.com/s/1a3K8hX0AwqKA0npr2nUttg
提取码:9swp
RabbitMq:
链接:https://pan.baidu.com/s/1Jbtj96GaJaGQb0kj2QDXSQ
提取码:1rkv
(2)装置步骤

  • Erlang 装置和配置

双击运行 otp_win64_23.0.exe 文件,



装置时特地留神:装置门路最好不要采纳默认门路,** 不要带空格!!!**
  • RabbitMQServer 装置和配置

    同上,这里不再赘述。

  • 环境变量配置
    RabbitMQ 的环境配置具体步骤,读者请参考
    转载:https://www.cnblogs.com/lijiasnong/p/8984493.html
3、RabbitMQ 的入门程序

咱们应用 Java 语言做 Demo, 模仿音讯队列的两端 MsgProducer(音讯生产者)异步发送音讯和 MsgConsumer(音讯消费者)接管音讯。

  • 新建 maven 工程

  • 增加依赖
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
</dependency>
  • 音讯生产者 MsgProducer
package com.example.rabbitmq.mqdemo;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class MsgProducer {

    // 音讯队列命名
    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception{
        // 创立连贯工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置 rabbit mq 地址,这里用本机
        factory.setHost("localhost");
        // 创立到代理服务器的连贯
        Connection connection = factory.newConnection();
        // 创立信道
        Channel channel = connection.createChannel();
        // 与音讯队列对接
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        // 定义公布音讯内容
        String msg = "Hello World!";
        // 公布音讯
        channel.basicPublish("",QUEUE_NAME,null,msg.getBytes());
        System.out.println("[x] MsgProducer Send ----------'" + msg + "'");

        // 敞开资源
       // connection.close();
       // channel.close();}
}


>
  • 音讯消费者 MsgConsumer
package com.example.rabbitmq.mqdemo;


import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

public class MsgConsumer {

    public static final String QUEUE_NAME = "hello";

    public static void main(String[] args) throws Exception{ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        // 服务器将队列中异步地向咱们发送音讯,DeliverCallback 子类异步回调和缓存音讯
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            // 接管服务端音讯
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println("[x] MsgConsumer Received ========='" + message + "'");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
    }
}
  • 运行后果

至此,Rabbit 初体验根本实现!

【小结】

1、从原理上了解 RabbitMQ 的作用,重点 P-Q-C 模型了解 异步 的概念;
2、学会利用官网学习新技能

【序幕】

自己职场小白,文章中不免呈现了解不到位或谬误的中央,还望大佬们批评指正。也欢送你评论,留言,点赞!

正文完
 0