RabbitMQ 安装使用

文章目录

  • RabbitMQ 安装使用
    • 安装
      • 下载 Erlang
      • 下载 RabbitMQ 的服务
      • 安装好后看是否有 RabbitMQ 的服务
      • 开启管理 UI
      • RabbitMQ 端口使用一览图
    • 使用
      • 输出最简单的 Hello World!
        • 生产者定义
        • 消费者消费消息
        • 小拓展

RabbitMQ 安装使用

安装

下载 Erlang

RabbitMQ 是用这个语言写的,这个语言性能好,下载就好了。

下载地址

如果是 Windows 直接点击 Installer 下载傻瓜式下载。

在这里插入图片描述

下载的时候一般不放到默认路径,自己选一个自己特定的安装路径。

下载 RabbitMQ 的服务

下载地址

也是直接点击看下图

在这里插入图片描述

安装好后看是否有 RabbitMQ 的服务

如果有这样的服务那就是成功啦。

ctrl + R 输入 services.msc

查看服务列表

找到 RabbitMQ 服务,如果在运行,那么就是安装成功了。

在这里插入图片描述

开启管理 UI

在目录,打开 sbin 目录

并且在此目录下打开命令行,运行 rabbitmq-plugins enable rabbitmq_management 如果没有什么报错的话就说明管理 UI 的插件已经成功配置。

这时候你只需要打开 localhost:15672/ 即可进入管理页面,如下:

在这里插入图片描述

一开始进入,如果需要密码的话,那么用户明和密码都是 guest

如果你在服务端需要远程管理,这个账号是登录不了的,需要你自己再去创建一个账号。

RabbitMQ 端口使用一览图

比如 15672 是管理 UI 的端口

RabbitMQ 服务就是运行在端口 5672

在这里插入图片描述

使用

这里使用的是 Java 版本

消息队列中的有几个重要的 专有名词,一个是生产者(producer)=》 生产消息,一个是消费者(consumer)=》 消费消息,一个是 broker 对消息进行转发的中间人。还有一个就是 router 路由,如何进行转发。

输出最简单的 Hello World!

输出 Hello World 就是这样的一个简单的模型。

在这里插入图片描述

有一个生产者创造一条消息转发到 Broker (这个是由 RabbitMQ 自动完成),一个消费者消费这条消息。

生产者定义

代码中有详细的注释。

package com.xwhking.testcode.TestRabbitMQ;

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

import java.nio.charset.StandardCharsets;

public class Send {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory(); // 创建一个RabbitMQ 的连接工厂
        factory.setHost("localhost"); // 设置RabbitMQ 的主机地址
        try (Connection connection = factory.newConnection(); // 创建一个连接
             Channel channel = connection.createChannel()) { // 创一个管道,用于通信,传输消息。
            channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 生命一个队列, 第一个参数是队列的名字,第二个参数是是否持久化,第三个参数是是否独占队列,第四个参数是是否自动删除,第五个参数是队列的属性。
            String message = "Hello World!";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); // 发布消息,第一个参数是交换机名,第二个参数是队列名,第三个参数是消息的属性,第四个参数是消息的内容。传输过程都是以二进制进行传输。
            System.out.println(" [x] Sent '" + message + "'");
        }
    }
}

运行以后就可以在管理界面看到了。

在这里插入图片描述

消费者消费消息
package com.xwhking.testcode.TestRabbitMQ;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
import java.nio.charset.StandardCharsets;

public class Recv {

    private final static String QUEUE_NAME = "hello"; // 队列名字

    public static void main(String[] argv) 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); // 声明一个队列,参数:队列名,是否持久化,是否独占,是否自动删除,参数
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), StandardCharsets.UTF_8);
            System.out.println(" [x] Received '" + message + "'");
        };// 消费者收到消息的回调函数,参数:消费者标签,消息,回调函数内,就是处理消息的代码
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { }); // 消费者,参数:队列名,是否自动应答,回调函数,消费者标签
    }
}

在这里插入图片描述

消费后管理页面

在这里插入图片描述

拥有的一条消息就被消费啦。

小拓展

消费者不是启动以后,就是一个阻塞线程吗,如果没有消息的来到,那么线程会一直阻塞,那么我是否能够改一下生产者,能够随时输入消息,让消费者收到呢。

嗯嗯嗯!

说干就干

修改生产者

package com.xwhking.testcode.TestRabbitMQ;

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

import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class Send {

    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory(); // 创建一个RabbitMQ 的连接工厂
        factory.setHost("localhost"); // 设置RabbitMQ 的主机地址
        try (Connection connection = factory.newConnection(); // 创建一个连接
             Channel channel = connection.createChannel()) { // 创一个管道,用于通信,传输消息。
            channel.queueDeclare(QUEUE_NAME, false, false, false, null); // 生命一个队列, 第一个参数是队列的名字,第二个参数是是否持久化,第三个参数是是否独占队列,第四个参数是是否自动删除,第五个参数是队列的属性。
            String message = "Hello World!";
            Scanner scanner = new Scanner(System.in);
            while(true){
                message = scanner.nextLine();
                channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8)); // 发布消息,第一个参数是交换机名,第二个参数是队列名,第三个参数是消息的属性,第四个参数是消息的内容。传输过程都是以二进制进行传输。
                System.out.println(" [x] Sent '" + message + "'");
            }
        }
    }
}

在这里插入图片描述

在这里插入图片描述

大家好,我是xwhking,一名技术爱好者,目前正在全力学习 Java,前端也会一点,如果你有任何疑问请你评论,或者可以加我QQ(2837468248)说明来意!希望能够与你共同进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442247.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ai写作一键生成文章速度快

ai写作是一种基于人工智能技术的自动写作工具,它可以根据用户提供的主题或关键词,快速一键生成文章。与传统的手动写作相比,ai写作的速度更快,效率更高。下面小编就带大家一起来见识下ai写作一键生成文章的速度是如何之快&#xf…

string 底层模拟实现常用接口

目录 前言 什么是string? 为什么要学习使用string?string的优势? 因此,string类的成员变量也如图顺序表一样,如下图所示: 构造函数 拷贝构造 析构函数 size() 、capacity() operato…

【C++】什么是类与对象?

🦄个人主页:修修修也 🎏所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 面向对象概述 封装 继承 多态 类 类是什么? C中类的引入 C中类的定义 类的两种定义方式: 1.声明和定义全部放在类体中 2.类声明与成员函数定义分别放在不同的工程文件中…

C语言数据结构之二叉堆

愿你千山暮雪 海棠依旧 不为岁月惊扰平添忧愁 🎥前期回顾-二叉树 🔥数据结构专栏 期待小伙伴们的支持与关注!!! 目录 前期回顾 二叉堆的概念及结构 二叉堆的创建 顺序表的结构声明 顺序表的创建与销毁 二叉堆的插入 …

CUDA安装及环境配置——最新详细版

确定安装版本 在安装之前呢,我们需要确定三件事 第一:查看显卡支持的最高CUDA的版本,以便下载对应的CUDA安装包 第二:查看对应CUDA对应的VS版本,以便下载并安装对应的VS版本(vs需要先安装) 第三…

基于Jupyter快速入门Python,Numpy,Scipy,Matplotlib

文章目录 Jupyter 和 Colab 笔记本PythonPython 版本基础数据类型数字Numbers布尔值Booleans字符串Strings 容器列表List字典Dictionaries集合Sets元组Tuples 函数类 Numpy数组Array数组索引Array indexing数据类型DatatypesArray math广播Broadcasting Scipy图像操作MATLAB文件…

IOS覆盖率报告info文件解读

一,IOS覆盖率报告的生成 在做前端精准测试的时候,对于iOS端,通常会做如下操作: (1)合并覆盖率数据 如下操作: xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_fil…

Java 可变长参数

可变长参数定义 从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。可变长参数允许方法接受任意多个相同类型的参数,在方法内部可以将这些参数视为数组来处理。可变长参数通过省略号&#xff0…

【洛谷 P8668】[蓝桥杯 2018 省 B] 螺旋折线 题解(数学+平面几何)

[蓝桥杯 2018 省 B] 螺旋折线 题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 ( X , Y ) (X, Y) (X,Y),我们定义它到原点的距离 dis ( X , Y ) \text{dis}(X, Y) dis(X,Y) 是从原点到 ( X , Y ) (X, Y) (X,Y) 的螺旋折线段的长度。 例如 …

java SSM汽车租赁管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM汽车租赁管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(3)

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

MySQL实战:SQL优化及问题排查

有更合适的索引不走,怎么办? MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即为基数 查…

Springboot+vue的项目申报管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的项目申报管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#xff09…

盲盒抽卡机小程序——开启神秘之旅!

亲爱的朋友们,欢迎来到盲盒抽卡机小程序!这里,是一个充满神秘与惊喜的世界,让你随时随地体验抽卡的乐趣。在这里,你可以轻松尝试各种盲盒,发现隐藏的宝藏,感受心跳加速的刺激。 【丰富多样的盲…

ARM单片机中程序在ROM空间和RAM空间的分布(分散加载文件,Scatter-Loading Description File)

对于 K e i l u V i s i o n I D E Keil\quad uVision\quad IDE KeiluVisionIDE,程序编译好之后,代码的下载位置( R O M ROM ROM空间)以及代码运行的时候使用的 R A M RAM RAM空间( R A M RAM RAM空间)默认…

华为云云耀云服务器L实例评测|用PHP从数据库到后端到前端完整实现一个中秋节祝福语项目

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…

考虑到通信链路中断的(Delay Tolerant Network, DTN)

文章目录 A Study of DTN for Reliable Data Delivery from Space Station to Ground Stationabstractintroduction An Analytical Framework for Disruption of Licklider Transmission Protocol in Mars Communicationsabstract本文贡献 OVERVIEW OF RELIABLE DATA TRANSMISS…

Excel转pdf

1、excel-内存值--Workbook 转pdf /** * excel To pdf * * param outPath 输出路径 * param workbook excel-内存值 * throws IOException */ public static void excelToPdf(String outPath,Workbook workbook) throws IOException, DocumentException { Document documentnul…

Android studio Gradle下载失败,如何手动配置解决该问题详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 今天在打开公司一个项目时,突然要重新下载相关的gradle&am…

图机器学习(4)-面向连接层面的人工特征工程

0 问题定义 通过已经连接去猜未知连接: 有两个思路: (1)直接提取link的特征,把link变成D维向量; (2)把link两端节点的D维向量拼在一起,缺点:丢失了link本身…