ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springboot实现路由(direct)模式

2021-05-30 22:36:19  阅读:197  来源: 互联网

标签:springboot direct springframework org import public 路由 amqp


发送端

路由模式:在绑定交换机与队列时,多了一个路由key(routingKey)

消息生产者

package com.zhang.rabbitmq.springbootrabbitmqproducer.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.UUID;

/**
* 路由模式:消息生产者
*/
@Component
public class OrederDirectService {

   @Autowired
   private RabbitTemplate rabbitTemplate;

   public void directMorikOrder(String userId, String producerId, int number){
       String orderId = UUID.randomUUID().toString();
       String order_id = UUID.randomUUID().toString();
       String exchangeName = "direct_order_exchange";
       rabbitTemplate.convertAndSend(exchangeName,"sms",orderId);
       rabbitTemplate.convertAndSend(exchangeName,"email",order_id);
  }
}

交换机与队列绑定

package com.zhang.rabbitmq.springbootrabbitmqproducer.config;

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 DirectConfigurationProducer {
   // 1:声明交换机与类型
   @Bean
   public DirectExchange directExchange(){
       return new DirectExchange("direct_order_exchange",true,false);
  }
   // 2:声明队列 sms.direct.queue email.direct.queue duanxin.direct.queue
   @Bean
   public Queue smsDirectQueue(){
       return new Queue("sms.direct.queue",true);
  }
   @Bean
   public Queue emailDirectQueue(){
       return new Queue("email.direct.queue", true);
  }
   @Bean
   public Queue duanxinDirectQueue(){
       return new Queue("duanxin.direct.queue",true);
  }
   // 3:绑定交换机与队列
   @Bean
   public Binding smsDirectBinding(){
       return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");
  }
   @Bean
   public Binding emailDirectBinding(){
       return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");
  }
   @Bean
   public Binding duanxinDirectBinding(){
       return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");
  }
}

消息消费者

package com.zhang.rabbitmq.springbootrabbitmqconsumer.service.direct;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
* 路由(dirent)模式:消息消费者
*/
@Component
@RabbitListener(queues = "duanxin.direct.queue")
public class DuanXinDirectConsumer {

   @RabbitHandler
   public void reviceDirect(String message) {
       System.out.println("direct duanxin--接收到的订单信息是-->" + message);
  }
}
package com.zhang.rabbitmq.springbootrabbitmqconsumer.service.direct;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
* 路由(direct)模式:消息接收者
*/
@Component
@RabbitListener(queues = {"email.direct.queue"})
public class EmailDirectConsumer {

   @RabbitHandler
   public void revierDirect(String message){
       System.out.println("direct email--接收到的订单信息是-->" + message);
  }
}
package com.zhang.rabbitmq.springbootrabbitmqconsumer.service.direct;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
* 路由(direct)模式
*/
@Component
@RabbitListener(queues = {"sms.direct.queue"})
public class SMSDirectConsumer {

   @RabbitHandler
   public void reviceDirect(String message){
       System.out.println("direct sms--接收到的订单信息是-->" + message);
  }
}

 

标签:springboot,direct,springframework,org,import,public,路由,amqp
来源: https://www.cnblogs.com/zhangjun9740/p/14829410.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有