赞
踩
目录
在讲交换机之前我们需要了解一些概念,在RabbitMQ工作流程有一项叫Exchange(交换机:消息的分发中心),它的作用是将生产者发送的消息转发到具体的队列,队列再将消息以推送或者拉取方式给消费者进行消费。
原:在RabbitMQ中生产者发送的信息不会直接投递到队列中,而是先将消息投递到交换机中,在由交换机路由到一个或多个队列中。
流程:生产者 --(路由键)---> 交换机 --(绑定键)---> 队列 --(pull,push)--->消费者
这里就需要了解这两个东西:
- 路由键(RoutingKey):每个消息都有一个称为路由键(routing key)的属性,它其实就是一个简单的字符串(或者可以说是一种规则的字符串)
- 绑定键(BindingKey):就是指定将队列跟接收路由键的交换机进行绑定
生产者将信息发送给哪个Exchange是由RoutingKey决定的,而Exchange与哪个队列绑定是由BindingKey决定的。
除交换机类型外,在声明交换机时还可以附带许多其他的属性,其中最重要的几个分别是:
这里就直接开始操作,配置在一篇就已做了讲解,非常简单!接下来的代码也之上在原基础上做了添加。
项目结构:
所需依赖:
<!--amqp协议--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
如下图:
一、p发送消息时带了一个叫black的routing_key,交换机接受后会送到与black绑定的binding_key的队列中,也就是Q2。以此类推...
二、还有一种情况,当Q2也与交换机绑定了black,这时p发送的信息会同时推送到Q1和Q2两个队列中。
- package com.ycxw.publisher.demos;
-
- 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
- @SuppressWarnings("all")
- public class RabbitConfig {
-
- /**
- * 定义队列 Q1
- * @return
- */
- @Bean
- public Queue directQ1() {
- return new Queue("direct-Q1");
- }
-
- /**
- * 定义队列 Q2
- * @return
- */
- @Bean
- public Queue directQ2() {
- return new Queue("direct-Q2");
- }
-
- /**
- * 自定义直连交换机
- * @return
- */
- @Bean
- public DirectExchange directExchange() {
- return new DirectExchange("direct-exchange", true, false);
- }
-
- /**
- * 将队列 Q1与交换机进行绑定,并设置路由键
- * @return
- */
- @Bean
- public Binding bindingQ1() {
- return BindingBuilder.bind(directQ1())
- .to(directExchange())
- .with("direct_orange");
- }
-
- /**
- * 将队列 Q2与交换机进行绑定,并设置路由键
- * @return
- */
- @Bean
- public Binding bindingQ2() {
- return BindingBuilder.bind(directQ2())
- .to(directExchange())
- .with("direct_black");
- }
-
- }
- package com.ycxw.publisher.demos;
-
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- 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;
-
- /**
- * 模拟发送请求
- */
- @RestController
- public class Sender {
- @Autowired
- private AmqpTemplate rabbitTemplate;
-
- @RequestMapping("/send1")
- public String sendFirst() {
- /*向消息队列发送消息 converAndSend(交换机,路由键,发送的信息)*/
- rabbitTemplate.convertAndSend("direct-exchange", "direct_orange", "我是Q1");
- return " 本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。