济南php网站开发网络游戏开发平台
2026/3/5 19:14:37 网站建设 项目流程
济南php网站开发,网络游戏开发平台,空调设备公司网站建设,凡科建站有哪些弊端1.什么是MQ#xff1f;MQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先⼊先出#xff0c;只不过队列中存放的内容是消息(message) ⽽已. 消息可以⾮常简单,⽐如只包含⽂本字符串, JSON等,也可以很复杂, ⽐如内嵌对象. MQ多⽤于分布式系统之间进⾏通信.系统之间通…1.什么是MQMQ( Message queue ), 从字⾯意思上看, 本质是个队列, FIFO 先⼊先出只不过队列中存放的内容是消息(message) ⽽已. 消息可以⾮常简单,⽐如只包含⽂本字符串, JSON等,也可以很复杂, ⽐如内嵌对象.MQ多⽤于分布式系统之间进⾏通信.系统之间通信1.同步通信2.异步通信RabbitMQ就是MQ的一种实现2.MQ的作用及什么时候使用MQMQ主要⼯作是接收并转发消息, 在不同的应⽤场景下可以展现不同的作⽤可以看一下下面的框图来理解以下总结了一些使用MQ的场景以及为什么使用异步解耦在业务流程中一些操作可能非常耗时但并不需要即时返回结果。可以借助 MQ 把这些操作异步化比如 用户注册后发送注册短信或邮件通知可以作为异步任务处理而不必等待这些操作完成后才告知用户注册成功.流量削峰在访问量剧增的情况下应用仍然需要继续发挥作用但是是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源无疑是巨大的浪费。使用 MQ 能够使关键组件支撑突发访问压力不会因为突发流量而崩溃。比如秒杀或者促销活动可以使用 MQ 来控制流量将请求排队然后系统根据自己的处理能力逐步处理这些请求.异步通信在很多时候应用不需要立即处理消息MQ 提供了异步处理机制允许应用把一些消息放入 MQ 中但并不立即处理它在需要的时候再慢慢处理.消息分发当多个系统需要对同一数据做出响应时可以使用 MQ 进行消息分发。比如支付成功后支付系统可以向 MQ 发送消息其他系统订阅该消息而无需轮询数据库.说明MQ可以将一个消息转发给多个对象一个生产者对应多个消费者延迟通知在需要在特定时间后发送通知的场景中可以使用 MQ 的延迟消息功能比如在电子商务平台中如果用户下单后一定时间内未支付可以使用延迟队列在超时后自动取消订单3.RabbitMQ基本概念核心组成我们必须需要了解一下RabbitMQ的一些基本组成以及处理消息的流程才能更好的使用写一些关于MQ的代码可以看一下以下的框图来有个快速的认知注意一点这里多个消费者可以订阅同一个队列4.Web界面操作这里可以通过该界面来查看一下队列的一些情况,这里通过url服务器ip端口号RabbitMQ的WEB端口一般默认为15672这里如果为rabbitmq的web端口配置了隧道就使用隧道端口来访问这里需要账号和密码来登录我的账号密码是adminadmin5.RabbitMQ配置与使用需要添加依赖!-- RabbitMQ -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency需要添加的配置项.properties## mq ## #安装Rabbitmq服务器地址 spring.rabbitmq.hostIP地址 #rabbit服务的业务端口号一般为5672这里如果专门配置了隧道使用隧道的端口 spring.rabbitmq.port端口号 spring.rabbitmq.username用户名 spring.rabbitmq.password密码 #消息确认机制默认auto spring.rabbitmq.listener.simple.acknowledge-modeauto #设置失败重试 5次 spring.rabbitmq.listener.simple.retry.enabledtrue spring.rabbitmq.listener.simple.retry.max-attempts5确认机制这里可以看一下这里的自动确认机制首先明白什么叫确认比如消息队列想要知道消费者拿了消息之后消费了吗这个是需要消费者来告诉的而中这个自动确认机制就是消费者拿到消息之后处理后没有抛出异常就默认是消费成功了而当消费者在消费消息方法中抛出了异常MQ就认定你消费失败了这就是自动确认机制spring.rabbitmq.listener.simple.acknowledge-modeauto当然除了自动确认机制还有手动确认机制这个就是由消费者手动返回告诉消息队列是否消费成功还有比如消息队列给消费者发后不管消费者是否消费都直接默认算你消费成功了以上就说了三种确认机制当然还有别的确认机制可以自行去了解失败重试这个就是当确认消费者消费失败以后消息队列重新向消费者发消息的最大次数通过这两个我们可以确保一些必须要做的事情就算失败了也要重做需要的配置类import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * RabbitMQ 直连交换机Direct Exchange配置类 */ Configuration public class DirectRabbitConfig { // 队列名称 public static final String QUEUE_NAME DirectQueue; // 交换机名称 public static final String EXCHANGE_NAME DirectExchange; // 路由键 public static final String ROUTING DirectRouting; /** * 声明直连队列 * durable: 是否持久化默认false持久化队列会存储在磁盘MQ重启后仍存在暂存队列仅当前连接有效 * exclusive: 是否排他默认false排他队列仅当前连接可用连接关闭后自动删除优先级高于durable * autoDelete: 是否自动删除默认false无生产者/消费者使用时自动删除 * * return 直连队列实例 */ Bean public Queue directQueue() { // 一般仅设置队列持久化其余参数使用默认值false return new Queue(QUEUE_NAME, true); } /** * 声明直连交换机 * * return 直连交换机实例 */ Bean public DirectExchange directExchange() { // 参数交换机名称、是否持久化、是否自动删除 return new DirectExchange(EXCHANGE_NAME, true, false); } /** * 绑定队列和交换机并指定匹配的路由键 * * return 绑定关系实例 */ Bean public Binding bindingDirect() { return BindingBuilder.bind(directQueue()) .to(directExchange()) .with(ROUTING); } /** * 配置消息转换器将消息序列化为JSON格式 * * return JSON消息转换器 */ Bean public MessageConverter jsonMessageConverter() { return new Jackson2JsonMessageConverter(); } }该类仔细阅读一下其实就是设置队列的名称并设置持久化设置交换机的名称并设置持久化不会自动删除绑定了队列和交换机并绑定了一个key路由键这样子我们通过他来指定放到哪个队列里面去最后设置了一下消息的转换格式就算将消息序列化为JSON配置完rabbitmq其实就等于我们将 生产者-消息队列-消费者 中消息队列部分的代码写完了这里我们只需要完成生产者的代码以及消费者代码即可

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询