最新 Windows10 中安装RabbitMQ详细步骤及使用示例

最新 Windows10 中安装RabbitMQ详细步骤及使用示例

发布:2023-11-27     分类:闲者编程     标签:WindowsRabbitMQMQ
2023 - 11 - 26

及大家好,我是闲者,今天记录下最新 2023 在 Windows10 中安装RabbitMQ的详细步骤,以供大家参考

一. 安装RabbitMQ服务器

1. 查看对应版本

在安装之前查看下RabbitMQ对应的erlang版本,这样可以避免很多问题。 查看地址

RabbitMQ对应版本

1. 下载

1.1. 下载erlang

原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。 下载地址:http://www.erlang.org/downloads

这里下载 25.1版本,根据最对照表,最新的几个RabbitMQ都可以适用。

erlang版本

1.2. 下载RabbitMQ

下载地址:https://www.rabbitmq.com/download.html

根据对照表,下载最新的即可。

2de0f15a-509c-11ee-be56-0242ac120002

2. 安装

2.1. 安装ERLand

双击【otp_win64_25.1.exe】,安装ERLang,依次点下一步即可,可以自定一指定安装路径,这里使用的路径为:D:\File\Apache\MQ\RabbitMq\ErlangOTP

安装完成之后配置环境变量

此电脑–>点击右键–>属性–>高级系统配置–>环境变量–>系统变量–>新建
变量名:ERLANG_HOME
变量值就是刚才erlang的安装地址 “D:\File\Apache\MQ\RabbitMq\ErlangOTP”,点击确定。

ErlangOTP路径

双击点击path,点击“新建”,将%ERLANG_HOME%\bin加入到path中。

ERLANG_HOME

验证ERLang是否安装成功:

最后windows键+R键,输入cmd打开cmd控制台,在cmd控制台中输入erl,看到版本号就说明ERLang安装成功了。

erl

出现 Eshell V13.1则代表安装成功,如果未出现,则根据具体报错解决,一般都是环境变量配置问题。

2.2. 安装RabbitMQ

双击【rabbitmq-server-3.8.9.exe】安装RabbitMQ

指定安装路径为 D:\File\Apache\MQ\RabbitMq\RabbitMQServer

安装完成之后,RabbitMQ安装目录有下面那些文件:

RabbitMQ

打开cmd命令控制台,进入RabbitMQ安装目录下的sbin目录D:\File\Apache\MQ\RabbitMq\RabbitMQServer\sbin ,启动命令

 rabbitmq-server start

出现以下界面则代表启动成功

6d144578-509e-11ee-be56-0242ac120002

查看RabbitMQ启动状态,在cmd控制台中输入:

rabbitmqctl status

注意:默认安装的RabbitMQ默认密码为:guest/guest

spring boot中的连接配置为:

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3. 安装RabbitMQ管理插件

首先验证RabbitMQ后台管理功能是否安装,打开浏览器,输入http://localhost:15672 回车,此时打不开这个站点,是因为没有安装管理插件。

进入RabbitMQ的安装目录下的sbin目录 D:\File\Apache\MQ\RabbitMq\RabbitMQServer\sbin,输入下面命令激活后台管理:

rabbitmq-plugins enable rabbitmq_management

然后再次打开RabbitMQ后台管理

RabbitMQ后台管理

默认管理帐号与密码为guest/guest,登录进去

4. 常见问题

4.1 命令

RabbitMQ服务安装,停止,启动命令

进入安装目下的sbin目录,执行下面的命令:

rabbitmq-service.bat install 或 rabbitmq-service install 
rabbitmq-service.bat stop 或 rabbitmq-service stop
rabbitmq-service.bat start 或 rabbitmq-server start

4.2 账号信息

查看当前账号信息,在sbin目录下打开控制台,执行:

rabbitmqctl.bat list_users

显示为:

Listing users ...
user    tags
guest   [administrator]

输出的解释:

user:这一列显示了 RabbitMQ 中的用户列表。
tags:这一列显示了与每个用户相关联的标签。在你提供的输出中,标签 [administrator] 表示名为 "guest" 的用户具有 "administrator" 标签。

具体来说,输出显示了一个名为 "guest" 的用户,该用户具有 "administrator" 标签。这意味着 "guest" 用户被授予了管理员权限,可以执行管理 RabbitMQ 的操作。

需要注意的是,默认情况下,RabbitMQ 在安装时会创建一个名为 "guest" 的用户,密码也是 "guest"。这个用户通常用于开发和测试目的,但在生产环境中,强烈建议创建自定义用户,并为其分配适当的权限,以提高安全性。不要在生产环境中继续使用默认的 "guest" 用户,因为它具有很高的权限,可能会带来潜在的安全风险。

如何设置新账号,有空了后期在说,这里仅用于测试。

二. 使用示例

Spring Boot中使用RabbitMQ,你可以使用Spring Boot提供的集成来更方便地编写RabbitMQ生产者和消费者。

1. 添加依赖

示例使用的框架为Java spring boot。确保你的Spring Boot项目中已经配置了RabbitMQ依赖,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2. 连接配置

配置RabbitMQ连接信息,通常在application.properties或application.yml中配置:

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

3. RabbitMQ配置文件

sendMessage 方法中的消息发送到了 queue.getName() 指定的队列,其中 queue 是通过 Spring 注入的队列实例。默认情况下,这将是一个匿名队列

配置消费指定队列,配置名为 test 的队列,如果不配置,spring boot在启动时不会默认初始化队列,启动会报错。

package com.gly.zhongnan.mq.rabbit.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.core.Queue;
/**
 * @author 闲者
 * @date 2023-09-13 10:28
 */
@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue myQueue() {
        return new Queue("test");
    }

    //想要初始几个队列,就写几个bean
    @Bean
    public Queue myQueue1() {
        return new Queue("test1");
    }
}

这样,消费者就会监听名为 "test" 的队列,并处理从 sendMessage 发送的消息。确保队列名称在生产者和消费者之间匹配,以便消息可以正确地传递。

4. RabbitMQ生产者

创建一个RabbitMQ生产者。注意,这里使用定时器,每隔5秒发送消息,消费者进行消费测试

package com.gly.zhongnan.mq.rabbit.producer;

import com.alibaba.fastjson2.JSONObject;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 闲者
 * @date 2023-09-13 10:09
 */
@Component
public class RabbitMQProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

//    @Autowired
//    private Queue queue;
//
//    public void sendMessage(String message) {
//        rabbitTemplate.convertAndSend(queue.getName(), message);
//        System.out.println("Sent: " + message);
//    }

    @Scheduled(fixedDelay = 5000) // 每隔5秒发送一次消息
    public void sendScheduledMessage() {
        String exchangeName = ""; // 使用默认交换器
        String routingKey = "test"; // 目标队列的名称

        List<Map<String, Object>> messages = createMessages(); // 创建消息列表
        for (Map<String, Object> message : messages) {
            rabbitTemplate.convertAndSend(exchangeName, routingKey, JSONObject.toJSONString(message));
            System.out.println("Sent: " + JSONObject.toJSONString(message));
        }
    }

    private List<Map<String, Object>> createMessages() {
        // 创建要发送的消息列表
        List<Map<String, Object>> messages = new ArrayList<>();
        // 添加消息
        for (int i = 1; i <= 5; i++) {
            Map<String, Object> message = new HashMap<>();
            message.put("key", "value" + i);
            messages.add(message);
        }
        return messages;
    }
}

使用 convertAndSend 方法明确指定了交换器名称为空字符串(使用默认交换器),并将 routingKey 设置为 "test",这样消息就会发送到指定的队列。

在上述代码中,注入了RabbitTemplate和队列,然后使用rabbitTemplate来发送消息。

5. RabbitMQ消费者

生产者将消息发送到 "test" 队列,而消费者将监听该队列以接收消息。确保队列名称在生产者和消费者之间匹配,以便消息可以正确地传递。

package com.gly.zhongnan.mq.rabbit.consumer;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author 闲者
 * @date 2023-09-13 10:10
 */
@Component
public class RabbitMQConsumer {

    @RabbitListener(queues = "test")
    public void receiveMessage(String message) {
        System.out.println("Received: " + message);
        // 处理接收到的消息
    }

}

spring boot 成功启动后,定时器将自动进行消息发送和消费。

注意:这仅仅是个示例,可自定义更复杂的配置。

更新:2023-11-27
点击评论
评论区