当前位置: 首页 > news >正文

网站规划的基本内容有哪些全国企业公示系统查询

网站规划的基本内容有哪些,全国企业公示系统查询,jquery 素材的网站,宠物用品网站开发背景RabbitMQ架构原理及消息分发机制 在现代分布式系统中,消息队列是不可或缺的组件之一。它不仅能够解耦系统模块,还能实现异步通信和削峰填谷。在众多消息队列中,RabbitMQ 因其高并发、高可靠性和丰富的功能而备受青睐。本文将从 RabbitMQ 的基…

RabbitMQ架构原理及消息分发机制

在现代分布式系统中,消息队列是不可或缺的组件之一。它不仅能够解耦系统模块,还能实现异步通信和削峰填谷。在众多消息队列中,RabbitMQ 因其高并发、高可靠性和丰富的功能而备受青睐。本文将从 RabbitMQ 的基础概念、架构原理、消息分发机制、持久化与内存管理、插件管理、Java API 编程以及 Spring 集成等方面,全面解析 RabbitMQ 的核心技术和应用场景。

一、RabbitMQ 简介

RabbitMQ 是一个基于 AMQP(Advanced Message Queuing Protocol)协议的消息中间件,由 Pivotal 公司开发并维护。它最初于 2007 年发布,使用 Erlang 语言编写,专为高并发和分布式场景设计。RabbitMQ 支持多种协议(如 STOMP、MQTT、HTTP 和 WebSocket),并且在国内大厂(如头条、美团、滴滴等)中广泛使用。

RabbitMQ 的名字来源于其高性能和高扩展性,正如兔子奔跑迅速且繁殖能力强一样,RabbitMQ 能够高效处理海量消息。

二、RabbitMQ 架构原理

RabbitMQ 的核心架构基于 AMQP 协议,主要由以下几个关键组件构成:

  1. Broker(代理/中介)
    Broker 是 RabbitMQ 的服务器实例,负责存储和转发消息。它通过 TCP 长连接与客户端通信。

  2. Connection(连接)
    客户端与 Broker 之间的 TCP 长连接,用于建立通信通道。

  3. Channel(通道)
    为了避免频繁创建和释放 TCP 连接的性能损耗,RabbitMQ 引入了 Channel 概念。Channel 是基于 Connection 的虚拟连接,用于发送和接收消息。

  4. Queue(队列)
    Queue 是存储消息的对象,支持多种类型(如 classic 和 quorum)。消息在队列中按照 FIFO(先进先出)原则存储和消费。

  5. Exchange(交换机)
    Exchange 是负责路由消息的组件,根据绑定键(binding key)和路由键(routing key)将消息分发到一个或多个队列。

  6. Vhost(虚拟主机)
    Vhost 是用于资源隔离和权限控制的逻辑单元,类似于命名空间。不同 Vhost 中可以有同名的 Exchange 和 Queue。

三、RabbitMQ 消息分发机制

RabbitMQ 提供了四种主要的交换机类型,用于灵活的消息路由:

  1. Direct(直连型)
    消息根据路由键(routing key)与绑定键(binding key)的完全匹配,路由到对应的队列。

  2. Topic(主题型)
    支持通配符(*#),用于模糊匹配路由键。例如,*.gupao.* 可以匹配所有以 gupao 为中间部分的路由键。

  3. Fanout(广播型)
    将消息广播到所有绑定的队列,无需路由键。

  4. Headers(头部型)
    通过消息头部的键值对进行路由,较少使用。

四、RabbitMQ 持久化与内存管理

  1. 持久化机制

    • 消息持久化:通过设置 deliveryMode 为 2,将消息写入磁盘。
    • 队列和交换机持久化:通过参数设置,确保服务重启后仍存在。
  2. 内存控制
    RabbitMQ 通过内存阈值(默认 40% 的系统内存)控制内存使用。当内存达到阈值时,会阻塞客户端连接并触发内存告警。

  3. 磁盘控制
    当磁盘剩余空间低于阈值(默认 50MB)时,RabbitMQ 会阻塞生产者,避免磁盘耗尽。

五、RabbitMQ 插件管理

RabbitMQ 提供了丰富的插件支持,例如管理插件(rabbitmq_management)和延迟插件(x-delayed-message)。插件可以通过命令行管理:

rabbitmq-plugins enable <plugin_name>
rabbitmq-plugins disable <plugin_name>

六、Java API 编程

RabbitMQ 提供了原生的 Java API,用于发送和接收消息。以下是一个简单的生产者和消费者示例:

生产者代码

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class MyProducer {private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";public static void main(String[] args) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.8.149");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("admin");factory.setPassword("123456");Connection conn = factory.newConnection();Channel channel = conn.createChannel();String msg = "Hello world, Rabbit MQ";channel.basicPublish(EXCHANGE_NAME, "gupao.best", null, msg.getBytes());channel.close();conn.close();}
}

消费者代码

import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP;public class MyConsumer {private final static String EXCHANGE_NAME = "SIMPLE_EXCHANGE";private final static String QUEUE_NAME = "SIMPLE_QUEUE";public static void main(String[] args) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.8.149");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("admin");factory.setPassword("123456");Connection conn = factory.newConnection();Channel channel = conn.createChannel();channel.exchangeDeclare(EXCHANGE_NAME, "direct", false, false, null);channel.queueDeclare(QUEUE_NAME, false, false, false, null);channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "gupao.best");Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {String msg = new String(body, "UTF-8");System.out.println("Received message : '" + msg + "'");}};channel.basicConsume(QUEUE_NAME, true, consumer);}
}

七、Spring 集成 RabbitMQ

Spring 提供了对 RabbitMQ 的封装,简化了开发流程。以下是 Spring Boot 的集成示例:

配置文件

spring.rabbitmq.host=192.168.8.149
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/

定义交换机和队列

@Configuration
public class RabbitConfig {@Beanpublic DirectExchange directExchange() {return new DirectExchange("vipDirectExchange");}@Beanpublic Queue firstQueue() {return new Queue("vipFirstQueue");}@Beanpublic Binding bindFirst(Queue firstQueue, DirectExchange directExchange) {return BindingBuilder.bind(firstQueue).to(directExchange).with("gupao.best");}
}

消费者

@Component
@RabbitListener(queues = "vipFirstQueue")
public class FirstConsumer {@RabbitHandlerpublic void process(@Payload String message) {System.out.println("Received message: " + message);}
}

生产者

@Service
public class RabbitSender {@Autowiredprivate AmqpTemplate amqpTemplate;public void send() {String message = "Hello, RabbitMQ!";amqpTemplate.convertAndSend("vipDirectExchange", "gupao.best", message);}
}

八、总结

RabbitMQ 作为一款功能强大的消息中间件,在高并发和分布式系统中有着广泛的应用。通过本文的介绍,我们了解了 RabbitMQ 的架构原理、消息分发机制、持久化与内存管理、插件管理以及如何通过 Java API 和 Spring 集成进行开发。希望本文能够帮助你快速掌握 RabbitMQ 的核心技术和应用场景。

参考链接

  • RabbitMQ 官方文档:https://www.rabbitmq.com/documentation.html
  • Spring AMQP 文档:https://docs.spring.io/spring-amqp/docs/current/reference/html/
  • Spring Boot 文档:https://docs.spring.io/spring-boot/docs/current/reference/html/
http://www.dtcms.com/a/608048.html

相关文章:

  • 仿励志一生网站整站源码 带数据如何用二级域名做网站
  • 申请域名做网站注册公司流程需要多久
  • 郑州市做网站企业网站建设套餐
  • 成都网站定制建设饥饿营销
  • 沈阳网站建设优化企业网络营销软件程序属于
  • 门户网站设计与开发企业文化经典句子
  • 网站建设的报价为什么不同WordPress建站要花钱
  • 惠州做公司网站门户系统1号线wordpress
  • 本地linux做网站让你做一个旅游网站你会怎么做
  • 上传了源程序提示网站建设中wordpress莫名文章
  • 中电云主机怎样登入创建的网站网站平台建设缴纳什么税
  • 企业网站实验报告泰州 住房和城乡建设厅网站
  • 天津南开做网站公司天津seo优化排名
  • 外贸怎么做站外推广珠海网络公司联系方式
  • 全球著名科技网站做官网网站哪家公司好
  • 做公众号和网站主页的区别站长工具 seo综合查询
  • 商洛市住户和城乡建设局网站信息价广告设计与制作专业能考二建吗
  • 网站建设管理制度九不准长沙好的设计公司
  • 做图片视频的网站有哪些问题二手房网签合同在哪个网站做
  • 厦门 网站建设 公司网站建设前的ER图
  • 网站后台如何做产品展示怎样做网站文件验证
  • 佛山网站搭建企业网站的宣传功能体现在()
  • 南京网站建设费用网站建设亿金手指花总14
  • 自学做网站需要多久开发者选项怎么设置最流畅
  • fastapi详解
  • 免费房地产网站模板网站没有做实名认证
  • 做明星网站wordpress 右拉
  • 国外优秀个人网站欣赏怎样解除拦截网站设置
  • 免费网站站北京做网站公司
  • 网站建设前期分析做网站的底图尺寸多大