rabbitmq + Spring boot 整合-广播模式- 路由-(02)

目录
rabbitmq-直接交换模式
rabbitmq-广播模式- 路由
rabbitmq-广播模式- 交换机
rabbitmq-转发模式
rabbitmq-延迟消费 在【队列上】
rabbitmq-延迟消费 在【消息上】

源码地址:https://gitee.com/caiwang/rabbitmq-project

回顾:

rabbitmq-直接交换模式中我们大概已经知道了rabbitmq的基本原理,现在我们去创建 rabbitmq-广播模式- 路由模式

首先 我们在common中创建统一管理的交换机名称

SenderConfDirectExchangeCommon

public class SenderConfDirectExchangeCommon {

	public static final String DIRECT_EXCHANGE = "direct_exchange";

	public static final String DIRECT_QUEUE_A = "direct_queue_a";

}

在生产者【rabbitmq-receiver-project02】中 我们来创建交换机和路由

SenderConfDirectExchangeConfig:

@Configuration
public class SenderConfDirectExchangeConfig {

	/**
	 * Direct Exchange – 处理路由键。
	 * 需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。
	 * 这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,
	 * 则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。
	 * 适合用于消息的单播发送 ,交换机根据推送消息时的 routing key 和 队列的 routing key 判断消息应该推送到哪个队列
	 */

	@Bean(name = "directQueueA")
	public Queue directQueueA() {
		return QueueBuilder.durable(SenderConfDirectExchangeCommon.DIRECT_QUEUE_A).build();
	}

	/**
	 * 功能描述  创建 DirectExchange 路由键
	 * @return org.springframework.amqp.core.DirectExchange
	 * @author cailu
	 * @date 2020/3/31 21:30
	 */
	@Bean(name = "directExchange")
	public DirectExchange directExchange() {
		// 第一个参数 路由键 第二个参数 持久化  第三个参数 自动删除
		return new DirectExchange(SenderConfDirectExchangeCommon.DIRECT_EXCHANGE, true, false);
	}

	/**
	 * 功能描述 绑定交换机
	 * @param queue          交换机
	 * @param directExchange 路由
	 * @return org.springframework.amqp.core.Binding
	 * @author cailu
	 * @date 2020/3/31 22:48
	 */
	@Bean
	public Binding directBindingA(@Qualifier("directQueueA") Queue queue, DirectExchange directExchange) {
		return BindingBuilder.bind(queue).to(directExchange).with(SenderConfDirectExchangeCommon.DIRECT_QUEUE_A);
	}

}

这里注意:
Direct Exchange – 处理路由键。
* 需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。
* 这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键 “dog”,
* 则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog。
* 适合用于消息的单播发送 ,交换机根据推送消息时的 routing key 和 队列的 routing key 判断消息应该推送到哪个队列

创建消息模板【SenderConfDirectExchangeTemplate】

SenderConfDirectExchangeTemplate:

@Component
public class SenderConfDirectExchangeTemplate {

	@Autowired
	private AmqpTemplate rabbitTemplate;

	public void sendDirectExchangeA(String str) {
		if ("".equals(str) || str == null) {
			rabbitTemplate.convertAndSend(SenderConfDirectExchangeCommon.DIRECT_EXCHANGE,
					SenderConfDirectExchangeCommon.DIRECT_QUEUE_A, " 广播模式 Direct Exchange bbb 路由");
		} else {
			rabbitTemplate.convertAndSend(SenderConfDirectExchangeCommon.DIRECT_EXCHANGE,
					SenderConfDirectExchangeCommon.DIRECT_QUEUE_A, str);
		}

	}

}

创建controller演示类

SenderConfDirectExchangeController:

@Api(value = "10002-Direct 广播模式", tags = {"10002-Direct 广播模式"})
@RestController
public class SenderConfDirectExchangeController {

	@Autowired
	private SenderConfDirectExchangeTemplate template;

	@GetMapping("sendDirectExchange")
	@ApiOperation(value = "30001-创建 Direct 广播模式 发布者", notes = "创建 Direct 广播模式 发布者")
	@ApiVersions(group = ApiVersionConstant.FAP_APP100)
	public String sendDirectExchange(@ApiParam(value = "自定义发送能容") @RequestParam(value = "str") String str) {
		template.sendDirectExchangeA(str);
		return "广播模式 Direct Exchange 路由  创建成功!";
	}

}

最后我们启动项目

在MQ后台 我们可以看见启动之后 就创建了EXchanges和queues

在这里插入图片描述
在这里插入图片描述
接下来 我们进行演示:
启动项目之后,浏览器 访问:http://localhost:8683/doc.html
在这里插入图片描述

发送一条请求之后 可以看到MQ后台已经有了一条等待消费的消息,

现在我们来创建消费者
在消费者【rabbitmq-receiver-project02】中我们创建类:

SenderConfDirectExchangeReceiver:

@Component
public class SenderConfDirectExchangeReceiver {

	@RabbitListener(queues = SenderConfDirectExchangeCommon.DIRECT_QUEUE_A)
	public void processQueue(String str) {
		System.out.println(SenderConfDirectExchangeCommon.DIRECT_QUEUE_A + ":=============" + str.toString());
	}

}

最后我们启动消费者,观察日志:

在这里插入图片描述
看到 这里马上就被消费掉了
至此 rabbitmq-广播模式- 路由完毕

源码地址:https://gitee.com/caiwang/rabbitmq-project

下一篇: rabbitmq-广播模式- 交换机

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值