什么是消息队列?
消息队列是一种在应用(服务)间的通讯方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 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连接需创建新的用户并赋予相应管理员权限。
消息发布者
- 定义消息队列(发布者定义即可)
@Configuration
public class RabbitConfig {
@Bean
public Queue queue() {
return new Queue("rabbitMQ_message" , true);
}
}
- 接口入参
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RabbitMQMessageCmd {
private String messageName;
private String content;
}
- 自定义消息
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RabbitMQMessage {
private String messageName;
private String content;
}
- 发布消息
@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);
}
}
消息消费者
- 消息监听处理
@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配置简单容易理解和上手。