Springboot 整合RabbitMq ,用心看完这一篇就够了,SpringBoot如何实现负载均衡

public void process(Map testMessage) {

System.out.println("TopicTotalReceiver消费者收到消息 : " + testMessage.toString());

}

}

同样,加主题交换机的相关配置,TopicRabbitConfig.java(消费者一定要加这个配置吗? 不需要的其实,理由在前面已经说过了。):

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.Queue;

import org.springframework.amqp.core.TopicExchange;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

  • @Author : JCccc

  • @CreateTime : 2019/9/3

  • @Description :

**/

@Configuration

public class TopicRabbitConfig {

//绑定键

public final static String man = “topic.man”;

public final static String woman = “topic.woman”;

@Bean

public Queue firstQueue() {

return new Queue(TopicRabbitConfig.man);

}

@Bean

public Queue secondQueue() {

return new Queue(TopicRabbitConfig.woman);

}

@Bean

TopicExchange exchange() {

return new TopicExchange(“topicExchange”);

}

//将firstQueue和topicExchange绑定,而且绑定的键值为topic.man

//这样只要是消息携带的路由键是topic.man,才会分发到该队列

@Bean

Binding bindingExchangeMessage() {

return BindingBuilder.bind(firstQueue()).to(exchange()).with(man);

}

//将secondQueue和topicExchange绑定,而且绑定的键值为用上通配路由键规则topic.#

// 这样只要是消息携带的路由键是以topic.开头,都会分发到该队列

@Bean

Binding bindingExchangeMessage2() {

return BindingBuilder.bind(secondQueue()).to(exchange()).with(“topic.#”);

}

}

然后把rabbitmq-provider,rabbitmq-consumer两个项目都跑起来,先调用/sendTopicMessage1  接口:

然后看消费者rabbitmq-consumer的控制台输出情况:

TopicManReceiver监听队列1,绑定键为:topic.man

TopicTotalReceiver监听队列2,绑定键为:topic.#

而当前推送的消息,携带的路由键为:topic.man

所以可以看到两个监听消费者receiver都成功消费到了消息,因为这两个recevier监听的队列的绑定键都能与这条消息携带的路由键匹配上。

接下来调用接口/sendTopicMessage2:

然后看消费者rabbitmq-consumer的控制台输出情况:

TopicManReceiver监听队列1,绑定键为:topic.man

TopicTotalReceiver监听队列2,绑定键为:topic.#

而当前推送的消息,携带的路由键为:topic.woman

所以可以看到两个监听消费者只有TopicTotalReceiver成功消费到了消息。

接下来是使用Fanout Exchang 扇型交换机。

同样地,先在rabbitmq-provider项目上创建FanoutRabbitConfig.java:

import org.springframework.amqp.core.Binding;

import org.springframework.amqp.core.BindingBuilder;

import org.springframework.amqp.core.FanoutExchange;

import org.springframework.amqp.core.Queue;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

  • @Author : JCccc

  • @CreateTime : 2019/9/3

  • @Description :

**/

@Configuration

public class FanoutRabbitConfig {

/**

  • 创建三个队列 :fanout.A fanout.B fanout.C

  • 将三个队列都绑定在交换机 fanoutExchange 上

  • 因为是扇型交换机, 路由键无需配置,配置也不起作用

*/

@Bean

public Queue queueA() {

return new Queue(“fanout.A”);

}

@Bean

public Queue queueB() {

return new Queue(“fanout.B”);

}

@Bean

public Queue queueC() {

return new Queue(“fanout.C”);

}

@Bean

FanoutExchange fanoutExchange() {

return new FanoutExchange(“fanoutExchange”);

}

@Bean

Binding bindingExchangeA() {

return BindingBuilder.bind(queueA()).to(fanoutExchange());

}

@Bean

Binding bindingExchangeB() {

return BindingBuilder.bind(queueB()).to(fanoutExchange());

}

@Bean

Binding bindingExchangeC() {

return BindingBuilder.bind(queueC()).to(fanoutExchange());

}

}

然后是写一个接口用于推送消息,

@GetMapping(“/sendFanoutMessage”)

public String sendFanoutMessage() {

String messageId = String.valueOf(UUID.randomUUID());

String messageData = "message: testFanoutM

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值