RabbitMQ的介绍/安装和SpringBoot集成简单使用(MacBook版)

RabbitMQ是什么?
本来想老规矩百度图镇楼的,想了想算了,自己总结吧,把自己最真实的感受写出。第一次接触到RabbitMQ,是在我刚毕业的时候,还是个愣头青,在一家外包公司傻乎乎的做CURD。有个秒杀场景,组长让我使用RabbitMQ来做延时入库,我懵逼了,完全没听说过的东西,于是去学,去用。后来在名创优品做一个用户邮箱系统有个场景又顺利用到了,所以实习生的经验积累真的很重要~
rabbit,理解为兔子,很快很快。
MQ,其实就是Message Queue (消息管道的英文缩写)。管道队列,理解成水管,先进先出,一边进另外一边出。但是里面装的不是水,是一些消息,具体是什么消息,可以看你业务需求,可以是个Map,基本类型,String,一条SQL语句,一个定时任务,序列化后的对象等等都可以。全靠自己DIY~
RabbitMQ可以干什么用?
这个问题,网上太多太多了,随便搜索一下优缺点一大堆,什么削峰填谷,什么延时加载,什么跨项目跨进程跨线程跨数据库进行数据传输。缺点就是导致项目可用性降低,MQ挂了相关服务也全挂之类的。没用过的背背就好了,用过的可能都不用背了。

安装RabbitMQ:

首先你的MACBook必须安装了brew。
然后执行:brew install rabbitmq

在这里插入图片描述

配环境

输入:sudo vi /etc/profile
填入:export RABBIT_HOME=/usr/local/Cellar/rabbitmq/3.7.15
export PATH=PATH:PATH:RABBIT_HOME/sbin

在这里插入图片描述

最后重启一下配置让它生效:source /etc/profile

启动:rabbitmq-server -detached

看下是否启动: rabbitmqctl status

有可能会出现疯狂报错(网上说是权限问题):

在这里插入图片描述

那就全部加个SUDO:
启动:sudo rabbitmq-server -detached
查看状态:sudo rabbitmqctl status

在这里插入图片描述

这样就成功了,打开浏览器输入:http://localhost:15672

看见这个可爱的兔子就是成功了:

在这里插入图片描述

下一步,SpringBoot集成:

依赖:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
			<version>1.5.2.RELEASE</version>
		</dependency>
写个消息的发送端Service:
package com.example.demo.serivceImp;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class RabbitMqService {
    @Autowired
    RabbitTemplate rabbitTemplate;

    public String sendData(int id, int password) {
        String channelNo = "jojo123";
        Map<String,Object> jojoMap = new HashMap<>();
        jojoMap.put("channelNo",channelNo);
        jojoMap.put("userId",id);
        jojoMap.put("password",password);
        rabbitTemplate.convertAndSend("jojo_channel",null,jojoMap);
        return channelNo;
    }
}

写个Controller:
@Autowired
    private RabbitMqService rabbitMqService;

    @GetMapping("/rabbitMq")
    public void rabbitMq(){
        String s = rabbitMqService.sendData(1111, 22222);
        System.out.println("发送出去的:"+s);
    }
写个消息的消费端Service(每次有新消息在管道里就自动输出):
package com.example.demo.serivceImp;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Map;

@Component
public class RabbitAccept {
    @RabbitListener(
            bindings = @QueueBinding(
                    value = @Queue(value = "jojo_test_queue"),
                    exchange = @Exchange(value = "jojo_channel",type = "fanout")
            )
    )
    @RabbitHandler
    public void handle(@Payload Map<String,Object> dataMap, Channel channel, @Headers Map<String,Object> headers){

        try {
            System.out.println("接收到的:"+dataMap);
            Long tag = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);
            channel.basicAck(tag,false);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

搞定收工!请求一下那个Controller,就可以看见:

在这里插入图片描述

这就证明已经发出去,然后又能从消息管道里拿回来了~这样就行啦~
再看看http://localhost:15672:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到我们测试用的管道和交换主机和频道和账号,在这里都有详细的记录,我们可以看到哪些管道哪些交换机哪些频道下的消息还没消费等等情况。初步的使用就暂时先用到这里啦~
最后关闭服务:sudo rabbitmqctl stop
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章