什么是消息队列?
消息队列是一种在应用(服务)间的通讯方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
常用的消息队列有哪些?
- RabbitMQ
- Kafka
- ActiveMQ
- RocketMQ(阿里的)
RabbitMQ实战
安装RabbitMQ
- 方式1:windows下安装包安装
- 因为RabbitMQ 是一个由 Erlang 语言开发的,所有安装之前要安装Erlang:Erlanng官网
- 去RabbitMQ下载安装包:RabbitMQ官网
- 开始安装-RabbitMQ安装包进行傻瓜式安装即可
- 在windows下配置erlang环境变量
- 进入RabbitMQ的安装bin目录,执行命令:
rabbitmq-plugins enable rabbitmq_management---安装管理插件 - 方式2:docker安装(笔者推荐)
docker pull rabbitmq:3.7.7-management :拉取镜像
docker run -d -p 15672:15672(管理界面端口映射) -p 5672:5672(TCP端口映射,服务通过此端口与RabbitMQ建立TCP连接,完成异步消息监听和发送) --name rabbitMQ 2888deb59dfc(拉取镜像的id)
连接配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
注:用localhost连接只可以在默认账户下,若想用本机ip连接需创建新的用户并赋予相应管理员权限。
消息发布者
- 定义消息队列(发布者定义即可)
package com.hfcsbc.springBootWeb.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
@Bean
public Queue queue() {
return new Queue("rabbitMQ_message" , true);
}
}
- 接口入参
package com.hfcsbc.springBootWeb.cmd;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RabbitMQMessageCmd {
private String messageName;
private String content;
}
- 自定义消息
package com.hfcsbc.springBootWeb.message;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RabbitMQMessage {
private String messageName;
private String content;
}
- 发布消息
package com.hfcsbc.springBootWeb.controller;
import com.alibaba.fastjson.JSONObject;
import com.hfcsbc.springBootWeb.cmd.RabbitMQMessageCmd;
import com.hfcsbc.springBootWeb.message.RabbitMQMessage;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/rabbitMQ")
public class RabbitMQController {
@Autowired
private RabbitTemplate template;
@PostMapping("/sendMessage")
public void sendRabbitMQMessage(@RequestBody RabbitMQMessageCmd cmd){
String json = JSONObject.toJSONString(new RabbitMQMessage(cmd.getMessageName(),cmd.getContent()));
template.convertAndSend("rabbitMQ_message",json);
}
}
消息消费者
- 消息监听处理
package liang.project.merengues.listener;
import com.alibaba.fastjson.JSONObject;
import liang.project.merengues.message.RabbitMQMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class RabbitMQListener {
@RabbitListener(queues = "rabbitMQ_message")
public void listener(String jsonString){
RabbitMQMessage message = JSONObject.parseObject(jsonString, RabbitMQMessage.class);
log.info(message.getMessageName());//处理你自己的业务代码
}
}
- 控制台打印消息

RabbitMQ管理端查看队列里未消费的消息
- localhost:15672登录管理端查看

总结
1.rabbitMQ建议使用docker安装。
2.连接配置注意连接的ip。
3.docker安装后注意端口的映射。
4.笔者认为RabbitMQ配置简单容易理解和上手。
来源:CSDN
作者:liang1184750950
链接:https://blog.csdn.net/liang1184750950/article/details/103682473

