RabbitMQ下载、安装及使用教程

前言

RabbitMQ是用Erlang语言开发的,是一个开源的消息代理软件,其主要功能是作为消息代理,接收和转发消息。它实现了高级消息队列协议(AMQP),用于在分布式系统之间进行可靠的异步通讯。
应用场景:异步处理、应用解耦、流量削峰

RabbitMQ安装

安装Erlang环境

安装RabbitMQ之前需要装一下Erlang环境,为啥呢?可以去官网看一下答案,看不懂英文不要紧,我来告诉你答案,刚开始我就说了,RabbitMQ是用Erlang语言开发的,它的安装包里并没有集成Erlang的环境,因此,需要先安装Erlang。
注意,安装Erlang环境首先得去官网查询一下Erlang与RabbitMQ的版本对应关系
Erlang官网下载地址:https://www.erlang.org/downloads
下载好.exe文件后直接傻瓜式安装即可

在这里插入图片描述

配置Erlang环境变量

在这里插入图片描述
注意:变量名一定要配置成ERLANG_HOME,变量值就是Erlang的安装目录
在这里插入图片描述
win + R输入cmd回车,输入erl或erl -version出现版本号即成功。
在这里插入图片描述

安装RabbitMQ

RabbitMQ官网:install-windows-rabbitmq
进入官网直接往下走,直到找到下面的安装人口后直接点击下载在这里插入图片描述
下载好后直接根据图形界面安装完成即可

配置RabbitMQ环境变量

与配置Erlang环境变量相似,变量名和值要改成RabbitMQ
在这里插入图片描述
在这里插入图片描述

安装管理工具RabbitMQ-Plugins

进入sbin目录下,打开cmd命令窗口输入:

rabbitmq-plugins enable rabbitmq_management

成功会输出以下信息:
在这里插入图片描述

启动RabbitMQ

进入安装目录的sbin目录,点击rabbit_server.bat,启动rabbitMQ

在这里插入图片描述
启动后输入http://localhost:15672/(默认账号密码是guest)就能进入rabbitMQ管理页面
在这里插入图片描述

在这里插入图片描述

添加用户

如果使用ip:端口的形式访问输入guest账号密码提示"User can only log in via localhost"
在这里插入图片描述

RabbitMQ默认提供了一个guest/guest用户,但是从3.3.0 版本以后该账号只能localhost登陆,解决办法就是通过命令行创建一个管理员账号

通过以下命令创建一个用户user,密码为123456

rabbitmqctl add_user user user123456

创建完成之后通过以下命令设置用户标签为administrator

rabbitmqctl set_user_tags user administrator

给用户user赋予权限,授予user用户可访问虚拟主机 /,并在所有的资源上具备可配置、可写及可读的权限

rabbitmqctl set_permissions -p / user ".*" ".*" ".*"

最后,通过以下命令可以看出当前的所有用户

rabbitmqctl list_users

再次使用ip+端口使用,登录成功
在这里插入图片描述

至此,RabbitMQ就安装完成了。

RabbitMQ使用

添加依赖

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

添加配置

在application.yml添加RabbitMQ连接配置信息:

spring:
  rabbitmq:
      host: 192.168.100.199
      port: 15672
      username: guest
      password: guest

创建配置文件

注意,如果你先写product发送消息时,需要用到RabbitTemplate,这时候有可能会报:Could not autowire. No beans of ‘RabbitTemplate’ type found.即未配置RabbitTemplate.
注意如果传递的消息不是普通类似string类型的,则要配置序列化

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    public static final String EXCHANGE = "exchange_lucy"; //交换机
    public static final String QUEUE_NAME = "lucy";
    public static final String BINDING_KEY = "lucy.*";
    public static final String ROUTING_KEY = "lucy.a";
    @Value("${spring.rabbitmq.host}")
    private String host;

    @Value("${spring.rabbitmq.port}")
    private int port;

    @Value("${spring.rabbitmq.username}")
    private String username;

    @Value("${spring.rabbitmq.password}")
    private String password;

    @Bean
    public ConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
        connectionFactory.setHost(host);
        connectionFactory.setPort(port);
        connectionFactory.setUsername(username);
        connectionFactory.setPassword(password);
        return connectionFactory;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter());
        return rabbitTemplate;
    }

    @Bean
    Queue queue(){
        return new Queue(QUEUE_NAME);
    }

    //交换机
    @Bean
    TopicExchange topicExchange(){
        return new TopicExchange(EXCHANGE);
    }

    //绑定关系
    @Bean
    Binding binding(){
        return BindingBuilder.bind(queue()).to(topicExchange()).with(BINDING_KEY);
    }

    //序列化
    @Bean
    Jackson2JsonMessageConverter jackson2JsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }

}

创建produce

@RestController
@AllArgsConstructor
public class ProduceController {

    private final RabbitTemplate rabbitTemplate;

    @PostMapping("/rabbitmq/sendMsg")
    public String sendMsg(@RequestBody TestVo vo) {
        System.out.println("发送消息");
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE,RabbitMQConfig.ROUTING_KEY, vo);
        return "success";
    }
}

消息传递对象:

@Data
public class TestVo implements Serializable {
    private String msg;
    private int code;

    public TestVo() {
    }
}

创建消息接收

@Component
public class MsgConsumer {

    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
    public void handleMsg(TestVo testVo){
        System.out.println("监听到消息,处理:"+testVo.getMsg());
    }
}

测试

使用postman或者apifox请求接口,后台打印日志
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值