• rabbitmq的direct和fanout模式


    rabbitmq的direct和fanout模式

    流程:

    1. 请求链接并发送mq
    2. 消费者获取mq并处理

    请求链接并发送mq
    controller(IndexController):

    @Autowired
    private IndexService indexService;
    
    @ResponseBody
    @RequestMapping(value="/direct")
    public void direct(){
    	log.info("[rabbitmq][direct][start]");
    	indexService.sendDirect();
    	log.info("[rabbitmq][direct][end]");
    }
    
    @ResponseBody
    @RequestMapping(value="/fanout")
    public void fanout(){
    	log.info("[rabbitmq][fanout][start]");
    	indexService.sendFanout();
    	log.info("[rabbitmq][fanout][end]");
    }
    

    service(IndexService):

    @Resource(name = "direct-template")
    private RabbitTemplate templateDirect;
    @Resource(name = "fanout-template")
    private RabbitTemplate fanoutDirect;
    
    public void sendDirect(){
    	Message<String> message = new Message<>();
    	message.setAction("DIRECT_TEST");
    	message.setData("DIRECT");
    	log.info("Message:"+message.getData());
    	templateDirect.convertAndSend(message);
    }
    
    public void sendFanout(){
    	Message<String> message = new Message<>();
    	message.setAction("FANOUT_TEST");
    	message.setData("FANOUT");
    	log.info("Message:"+message.getData());
    	fanoutDirect.convertAndSend(message);
    }
    

    消费者获取mq并处理:
    1.direct 方式

    <bean id="directListener" class="com.calron.rabbitmq.listener.DirectListener" />
    <rabbit:direct-exchange name="directExchange"
    	auto-declare="true" auto-delete="false" durable="true" declared-by="mqAdmin">
    	<rabbit:bindings>
    		<rabbit:binding queue="directQueue" key="directRoutekey" />
    	</rabbit:bindings>
    </rabbit:direct-exchange>
    <rabbit:queue name="directQueue"
    	auto-declare="true" auto-delete="false"
    	durable="true" declared-by="mqAdmin" />	
    
    <rabbit:template id="direct-template"
    	connection-factory="mqConnectionFactory"
    	queue="directQueue"
    	exchange="directExchange"
    	routing-key="directRoutekey"
    	message-converter="mqMessageConvertor" />		
    	
    <rabbit:listener-container connection-factory="mqConnectionFactory" message-converter="mqMessageConvertor">
    	<rabbit:listener ref="directListener" method="accept"
    		response-exchange="directExchange"
    		response-routing-key="directRoutekey"
    		queue-names="directQueue" />
    </rabbit:listener-container>
    

    DirectListener:

    @Override
    public void accept(String messageContent) throws Throwable {
    	log.info("direct listener");
    }
    

    2.fanout方式

    <bean id="fanoutListener1" class="com.calron.rabbitmq.listener.FanoutListener1" />
    <bean id="fanoutListener2" class="com.calron.rabbitmq.listener.FanoutListener2" />
    <rabbit:fanout-exchange name="fanoutExchange"
    	auto-declare="true" auto-delete="false" durable="true" declared-by="mqAdmin">
    	<rabbit:bindings>
    		<rabbit:binding queue="fanoutQueue1"/>
    		<rabbit:binding queue="fanoutQueue2"/>
    	</rabbit:bindings>
    </rabbit:fanout-exchange>
    <rabbit:queue name="fanoutQueue1"
    	auto-declare="true" auto-delete="false"
    	durable="true" declared-by="mqAdmin" />	
    <rabbit:queue name="fanoutQueue2"
    	auto-declare="true" auto-delete="false"
    	durable="true" declared-by="mqAdmin" />	
    
    <rabbit:template id="fanout-template"
    	connection-factory="mqConnectionFactory"
    	queue="fanoutQueue"
    	exchange="fanoutExchange"
    	routing-key="fanoutRoutekey"
    	message-converter="mqMessageConvertor" />		
    	
    <rabbit:listener-container connection-factory="mqConnectionFactory" message-converter="mqMessageConvertor">
    	<rabbit:listener ref="fanoutListener1" method="accept"
    		queue-names="fanoutQueue1" />
    	<rabbit:listener ref="fanoutListener2" method="accept"
    		queue-names="fanoutQueue2" />	
    </rabbit:listener-container>
    

    FanoutListener1:

    @Override
    public void accept(String messageContent) throws Throwable {
    	log.info("fanout listener11111111111111");
    }
    

    FanoutListener2:

    @Override
    public void accept(String messageContent) throws Throwable {
    	log.info("fanout listener222222222222222");
    }
    

    运行代码,访问链接,查看结果。
    访问/direct

    [com.controller.IndexController]-[INFO] [rabbitmq][direct][start]
    [com.service.IndexService]-[INFO] Message:DIRECT
    [com.controller.IndexController]-[INFO] [rabbitmq][direct][end]
    [com.listener.DirectListener]-[INFO] direct listener
    

    访问/fanout

    [com.controller.IndexController]-[INFO] [rabbitmq][fanout][start]
    [com.service.IndexService]-[INFO] Message:FANOUT
    [com.controller.IndexController]-[INFO] [rabbitmq][fanout][end]
    [com.listener.FanoutListener2]-[INFO] fanout listener222222222222222
    [com.listener.FanoutListener1]-[INFO] fanout listener11111111111111
  • 相关阅读:
    Linux input子系统学习总结(一)---- 三个重要的结构体
    DRM/KMS 基本组件介绍
    Framebuffer 驱动学习总结(二)---- Framebuffer模块初始化
    Framebuffer 驱动学习总结(一) ---- 总体架构及关键结构体
    Linux USB驱动学习总结(三)---- USB鼠标的加载、初始化和通信过程
    Linux USB驱动学习总结(一)---- USB基本概念及驱动架构
    使用Python调用动态库
    使用 SignalR与SSE(Sever sent event)向客户端推送提示信息
    在IDEA下使用Spring Boot的热加载(Hotswap)
    使用Spring boot + jQuery上传文件(kotlin)
  • 原文地址:https://www.cnblogs.com/cuiyf/p/7662439.html
Copyright © 2020-2023  润新知