辽宁营商环境建设网站erp企业管理软件
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:29
当前位置: 首页 > news >正文
辽宁营商环境建设网站,erp企业管理软件,企业网站seo教程,h5 网站开发流程什么是消息队列mq
可以看我之前写的这篇 消息队列MQ
rabbitmq简介
RabbitMQ是由erlang语言开发#xff0c;基于AMQP#xff08;Advanced Message Queue 高级消息队列协议#xff09;协议实现的消息队列#xff0c;它是一种应用程序之间的通信方法#xff0c;消息队列在…什么是消息队列mq
可以看我之前写的这篇 消息队列MQ
rabbitmq简介
RabbitMQ是由erlang语言开发基于AMQPAdvanced Message Queue 高级消息队列协议协议实现的消息队列它是一种应用程序之间的通信方法消息队列在分布式系统开发中应用非常广泛。
brew安装rabbitmq
1、安装 官方文档
brew install rabbitmq这是安装的 log
Management UI: http://localhost:15672
Homebrew-specific docs: https://rabbitmq.com/install-homebrew.htmlTo start rabbitmq now and restart at login:brew services start rabbitmq
Or, if you dont want/need a background service you can just run:CONF_ENV_FILE/opt/homebrew/etc/rabbitmq/rabbitmq-env.conf /opt/homebrew/opt/rabbitmq/sbin/rabbitmq-server2、打开 http://localhost:15672 默认的用户名密码都是 guest登录后可以在 Admin 那一列菜单内添加自己的用户
权限 超级管理员(administrator) 可登陆管理控制台可查看所有的信息并且可以对用户策略(policy)进行操作。
监控者(monitoring) 可登陆管理控制台同时可以查看rabbitmq节点的相关信息(进程数内存使用情况磁盘使用情况等)
策略制定者(policymaker) 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
普通管理者(management) 仅可登陆管理控制台无法看到节点信息也无法对策略进行管理。
其他 无法登陆管理控制台通常就是普通的生产者和消费者。
创建虚拟主机Virtual Hosts
为了让各个用户可以互不干扰的工作RabbitMQ添加了虚拟主机Virtual Hosts的概念。其实就是一个独立的访问路径不同用户使用不同路径各自有自己的队列、交换机互相不会影响。
交换机类型
- 直连交换机Direct Exchange 特点 基于路由键Routing Key的完全匹配来路由消息。 应用场景 当消息需要明确指定到某个队列时使用直连交换机。 举例说明 假设有一个订单处理系统其中包含“订单处理”和“订单审核”两个队列。生产者发送一个消息时指定路由键为“order.process”那么只有绑定了该路由键的“订单处理”队列会收到消息。如果指定路由键为“order.review”则只有“订单审核”队列会收到消息。
- 扇形交换机Fanout Exchange 特点 将消息广播到所有绑定到它的队列忽略路由键。如果N个队列绑定到某个扇型交换机上当有消息发送给此扇型交换机时交换机会将消息的发送给这所有的N个队列 应用场景 当需要将消息发送给多个队列且每个队列都需要接收到相同消息的副本时使用扇出交换机。 举例说明 假设有一个实时新闻发布系统包含“新闻订阅者A”和“新闻订阅者B”两个队列。生产者发布一条新闻消息到扇出交换机那么这条消息将被同时发送到“新闻订阅者A”和“新闻订阅者B”两个队列实现广播效果。
- 主题交换机Topic Exchange 特点 基于路由键和通配符和#的模糊匹配来路由消息。 应用场景 当需要根据消息的不同类型或属性将其路由到不同的队列时使用主题交换机。 举例说明 假设有一个日志系统包含“error.log”、“info.log”和“debug.log”三个队列。生产者发送一条错误日志消息路由键为“system.error”。此时绑定了“.error”或“system.#”的队列将接收到这条消息因此“error.log”队列会收到它而“info.log”和“debug.log”则不会除非它们也绑定了匹配的路由键。
- (星号) 用来表示一个单词 (必须出现的) # (井号) 用来表示任意数量零个或多个单词 通配的绑定键是跟队列进行绑定的举个小例子 队列Q1 绑定键为.TT. 队列Q2绑定键为 TT.# 如果一条消息携带的路由键为 A.TT.B那么队列Q1将会收到 如果一条消息携带的路由键为TT.AA.BB那么队列Q2将会收到
- 头部交换机Headers Exchange 特点 基于消息的头部信息进行匹配而不是路由键。 应用场景 当需要根据消息的复杂属性进行路由时使用头部交换机。这种交换机类型使用较少因为它需要更复杂的匹配逻辑。 举例说明假设场景 假设有一个消息处理系统其中消息具有多个头部属性如“priority”优先级、“type”类型等。生产者发送一条高优先级的紧急消息并设置相应的头部属性。此时只有那些设置了匹配这些头部属性如“priorityhigh”的队列才会接收到这条消息。 RabbitMQ的工作原理 组成部分说明 Broker消息队列服务进程此进程包括两个部分Exchange和Queue Exchange消息队列交换机按一定的规则将消息路由转发到某个队列对消息进行过虑。 Queue消息队列存储消息的队列消息到达队列并转发给指定的消费者 Producer消息生产者即生产方客户端生产方客户端将消息发送 Consumer消息消费者即消费方客户端接收MQ转发的消息。 生产者发送消息流程 1、生产者和Broker建立TCP连接。 2、生产者和Broker建立通道。 3、生产者通过通道消息发送给Broker由Exchange将消息进行转发。 4、Exchange将消息转发到指定的Queue队列 消费者接收消息流程 1、消费者和Broker建立TCP连接 2、消费者和Broker建立通道 3、消费者监听指定的Queue队列 4、当有消息到达Queue时Broker默认将消息推送给消费者。 5、消费者接收到消息。 6、ack回复 使用 基本配置 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId /dependencyspring.application.namezy-rabbitmqspring.rabbitmq.host127.0.0.1 spring.rabbitmq.port5672 spring.rabbitmq.usernamexxx spring.rabbitmq.passwordxxx #虚拟host 可以不设置,使用server默认host spring.rabbitmq.virtual-host: JCcccHost直连交换机示例 创建一个配置文件 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class DirectRabbitConfig {//队列 起名TestDirectQueueBeanpublic Queue TestDirectQueue() {// durable:是否持久化,默认是false,持久化队列会被存储在磁盘上当消息代理重启时仍然存在暂存队列当前连接有效// exclusive:默认也是false只能被当前创建的连接使用而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除当没有生产者或者消费者使用此队列该队列会自动删除。// return new Queue(TestDirectQueue,true,true,false);//一般设置一下队列的持久化就好,其余两个就是默认falsereturn new Queue(TestDirectQueue,true);}//Direct交换机 起名TestDirectExchangeBeanDirectExchange TestDirectExchange() {// return new DirectExchange(TestDirectExchange,true,true);return new DirectExchange(TestDirectExchange,true,false);}//绑定 //将队列和交换机绑定, 并设置用于匹配键TestDirectRoutingBeanBinding bindingDirect() {return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with(TestDirectRouting);}BeanDirectExchange lonelyDirectExchange() {return new DirectExchange(lonelyDirectExchange);} } 写个简单的接口进行消息推送根据需求也可以改为定时任务等等具体看需求 import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; import java.util.UUID;RestController public class SendMessageController {//使用RabbitTemplate,这提供了接收/发送等等方法AutowiredRabbitTemplate rabbitTemplate; GetMapping(/sendDirectMessage)public String sendDirectMessage() {String messageId String.valueOf(UUID.randomUUID());String messageData test message, hello!;String createTime LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss));MapString,Object mapnew HashMap();map.put(messageId,messageId);map.put(messageData,messageData);map.put(createTime,createTime);//将消息携带绑定键值TestDirectRouting 发送到交换机TestDirectExchangerabbitTemplate.convertAndSend(TestDirectExchange, TestDirectRouting, map);return ok;} } 可以看到消息已经推送到rabbitMq服务器上面了。接下来要消费这个消息了。一般来说要开启另一个服务来消费了但是我们是练习就在当前服务进行消费。 然后是创建消息接收监听类 Component //监听的队列名称 TestDirectQueue RabbitListener(queues TestDirectQueue) public class DirectReceiver {RabbitHandlerpublic void process(Map testMessage) {System.out.println(DirectReceiver消费者收到消息 : testMessage.toString());}} 运行项目就把这个消息消费掉了。 扇形交换机、主题交换机 和上面的差不多就先不写了 参考资料 https://blog.csdn.net/weixin_42039228/article/details/123493937
- 上一篇: 辽宁网站优化校园网门户网站建设方案
- 下一篇: 辽宁营商环境建设网站三丰云做网站步骤
相关文章
-
辽宁网站优化校园网门户网站建设方案
辽宁网站优化校园网门户网站建设方案
- 技术栈
- 2026年03月21日
-
辽宁网站建设网站服务器代码放在哪
辽宁网站建设网站服务器代码放在哪
- 技术栈
- 2026年03月21日
-
辽宁网站建设论坛wordpress+优化速度
辽宁网站建设论坛wordpress+优化速度
- 技术栈
- 2026年03月21日
-
辽宁营商环境建设网站三丰云做网站步骤
辽宁营商环境建设网站三丰云做网站步骤
- 技术栈
- 2026年03月21日
-
辽宁住房和城乡建设部网站wordpress dx
辽宁住房和城乡建设部网站wordpress dx
- 技术栈
- 2026年03月21日
-
辽阳哪里做网站wordpress添加友链申请
辽阳哪里做网站wordpress添加友链申请
- 技术栈
- 2026年03月21日
