网站建设-部署与发布,wordpress怎么代码高亮,wordpress archive模板,佛山网站设计案例构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言
在当今互联网时代#xff0c;消息队列系统扮演着至关重要的角色#xff0c;它们被广泛应用于分布式系统、微服务架构… 构建高可用消息队列系统 01 引言1. RabbitMQ简介介绍1.1 什么是RabbitMQ1.2 RabbitMQ的核心特性1.3 RabbitMQ与AMQP 2.安装RabbitMQ3.消息队列实践总结 引言
在当今互联网时代消息队列系统扮演着至关重要的角色它们被广泛应用于分布式系统、微服务架构以及异步通信等领域。RabbitMQ作为最流行的开源消息队列之一具有高可用性、可靠性和灵活性本篇博客将深入探讨RabbitMQ的高级应用包括简介介绍、安装配置以及实际案例分析。
1. RabbitMQ简介介绍
1.1 什么是RabbitMQ
RabbitMQ是一个开源的消息代理软件实现了高级消息队列协议AMQP并提供了可靠的消息传递、灵活的路由、消息确认机制等特性。它是一个强大的工具用于构建分布式系统中的异步通信和解耦同时也适用于构建大规模的数据处理系统。RabbitMQ的核心概念包括交换机、队列、绑定等通过这些概念可以实现灵活的消息路由和处理。在分布式系统中RabbitMQ能够提供高可用性、可靠性和灵活性使得系统能够更好地应对高并发和大规模数据处理的挑战。
1.2 RabbitMQ的核心特性
消息持久化RabbitMQ允许消息持久化到磁盘即使在代理重启后也不会丢失。这对于关键业务数据的可靠性至关重要。消息确认机制RabbitMQ支持消息的确认机制生产者可以收到消息代理已经成功接收消息的确认确保消息不会丢失。灵活的路由规则RabbitMQ的灵活的路由规则允许消息根据不同的条件被路由到不同的队列从而实现复杂的消息处理逻辑。高可用性RabbitMQ支持集群和镜像队列可以实现高可用性的消息队列系统即使某个节点发生故障系统仍然能够正常运行。可靠性RabbitMQ通过消息确认机制和持久化等特性保证了消息传递的可靠性即使在网络故障或者节点故障的情况下也能够保证消息不丢失。
1.3 RabbitMQ与AMQP
RabbitMQ是一个实现了高级消息队列协议AMQP的消息代理软件。AMQP是一种面向消息的中间件标准协议旨在提供统一的消息传递模型以便不同的消息中间件系统可以进行互操作。、
RabbitMQ完全实现了AMQP 0-9-1版本这意味着它遵循了AMQP协议定义的消息格式、交换机、队列、绑定等核心概念同时也支持AMQP定义的高级特性如事务、确认机制等。
通过遵循AMQP协议RabbitMQ能够与其他支持AMQP的消息中间件系统进行无缝集成实现跨平台、跨语言的消息传递。这使得开发人员可以更加灵活地选择适合自己业务需求的消息中间件系统同时也为系统的可扩展性和互操作性提供了保障。
2.安装RabbitMQ
拉取Rabbitmq镜像
docker pull rabbitmq:managemen开启两个端口,5672,15672
firewall-cmd --zonepublic --add-port5672/tcp --permanent
firewall-cmd --zonepublic --add-port15672/tcp --permanent更新防火墙
firewall-cmd --reload查看开放端口
firewall-cmd --zonepublic --list-ports然后创建容器
docker run -d \
--name my-rabbitmq \
-p 5672:5672 -p 15672:15672 \
--hostname my-rabbitmq-host \
-e RABBITMQ_DEFAULT_VHOSTmy_vhost \
-e RABBITMQ_DEFAULT_USERadmin \
-e RABBITMQ_DEFAULT_PASSadmin \
--restartalways \
rabbitmq:management创建好了就可以访问了 创建用户 给他分配一个my_vhost权限 现在RabbitMQ安装设置好了
3.消息队列实践
创建一个空项目 并创建两个maven项目,分别对应着消费者和生产者 分别写好yml文件 消费者8999,生产者8888(端口号)
server:port: 8888
spring:rabbitmq:host: 192.168.238.129password: 123456port: 5672username: springvirtual-host: my_vhost在生产者项目中放一个消息队列,并取名,firstQueue是队列名字
Configuration
SuppressWarnings(all)
public class RabbitConfig {
Bean
public Queue firstQueue() {
return new Queue(firstQueue);
}public Queue secondQueue() {return new Queue(secondQueue);}
}导这个包 然后准备一个发消息的Controller
package com.example.publiuse;import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** author 叶秋* site* company 卓京公司* create 2024-01-19 20:10*/
RestController
public class TestController {Autowiredprivate AmqpTemplate amqpTemplate;RequestMapping(/send1)public String send1(){//向消息队列发送消息amqpTemplate.convertAndSend(firstQueue,hello);return 哈哈;;}
}
访问一手 消息队列显示 消费者监听
Component
SuppressWarnings(all)
Slf4j
RabbitListener(queues firstQueue)
public class Receiver {
RabbitHandler
public void process(String msg) {
log.warn(接收到: msg);
}
}http://localhost:8888/send1 访问几次 然后被监听 这样就大大解除了代码的耦合性
另一个案例 新建一个User类,生成消费都需要
SuppressWarnings(all)
Data
AllArgsConstructor
NoArgsConstructor
public class User implements Serializable{
private String username;
private String userpwd;
}生产者事件 RequestMapping(/send2)public String send2() throws Exception{//向消息队列发送消息User user new User(yh, 123);String string objectMapper.writeValueAsString(user);amqpTemplate.convertAndSend(secondQueue,string);return 哈哈;;}消费者监听
package com.example.consumer;import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;Component
SuppressWarnings(all)
Slf4j
RabbitListener(queues secondQueue)
public class Receiver2 {Autowiredprivate ObjectMapper objectMapper;
RabbitHandler
public void process(String string) throws Exception{User user objectMapper.readValue(string, User.class);log.warn(接收到: user);
}
}总结
通过本篇博客的学习读者将深入了解RabbitMQ的核心概念、高级特性以及实际应用场景掌握如何搭建高可用的消息队列系统为构建稳定、可靠的分布式系统提供有力支持。