zoukankan      html  css  js  c++  java
  • java-rabbimq

    spring常规配置

    一个rabbitTemplate=rabbitConnFactroy(单例)+交换机(消费者和生成者双方都需要配置)

    如:

    <bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
            <constructor-arg ref="rabbitConnFactory"></constructor-arg>
            <property name="exchange" value="${rabbitmq.ReciveExchangeName}" />
        </bean>

    一个监听容器=连接+队列名称+消费者实例(消费者方配置)

    如:

        <rabbit:listener-container connection-factory="rabbitConnFactory" concurrency="5">
                 <rabbit:listener queues="${rabbitmq.ReciveQueueName}" ref="messageConsumer" />
        </rabbit:listener-container>

    接收消息方只需实现 

    org.springframework.amqp.core.MessageListener
    监听 监听容器中配好的 队列就可以了

    至于消息如何发送通过交换机发送到指定对列

    是由绑定来搞定的

    一个绑定=交换机+队列+路由键(消费者方配置)

    <!--定向式 需要路由键唯一定向-->
           <rabbit:direct-exchange name="zf.fanout">
               <rabbit:bindings>
                   <rabbit:binding queue="zfQueue" key="sss"></rabbit:binding>
                   <rabbit:binding queue="zfQueue2" key="eerre"/>
               </rabbit:bindings>
           </rabbit:direct-exchange>
        <!--分发式 不需要路由键,队列只要绑定即可收到消息(ps:效率最高)-->
        <rabbit:fanout-exchange name="zf.fanout">
            <rabbit:bindings>
                <rabbit:binding queue="zfQueue" ></rabbit:binding>
                <rabbit:binding queue="zfQueue2"/>
            </rabbit:bindings>
        </rabbit:fanout-exchange>
    
        <!--通配式 路由键统配上的即可收到消息是 fintout的一个模糊匹配版 其中*表示的通配一个字符窜,#表示的是可以通配多个字符窜-->
        <rabbit:topic-exchange name="zf.topic">
           <rabbit:bindings>
               <rabbit:binding queue="zfQueue" pattern="zf.topic.*"></rabbit:binding>
               <rabbit:binding queue="zfQueue2" pattern="zf.topic.*"></rabbit:binding>
           </rabbit:bindings>
        </rabbit:topic-exchange>

    其中路由键不写默认为"" 也是有效的具体可以通过xx:15672查看

    那么生成者 已一个基于 交换机template  外加(Object 消息内容,String 路由键)即可发送消息

    如:

     public DetailResult sendByQueue(Object message, String queue) {

    后续=>通过 消费者方提供的 绑定路由键 就可以抵达 目标队列=>消费者就可以 消费了(ps:消费者服务必须先启动,否则消费将采用默认路由键"" 发送到黑洞中去)

    总结:对于 fontout交换机

    生产者:只需关注交换机名称

    <bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
            <constructor-arg ref="rabbitConnFactory"></constructor-arg>
            <property name="exchange" value="zf.fanout" /> </bean>

    消费者:需要生产者提供交换机名称,将需要接受消息的对列绑定到交换机,并声明监听容器即可

     <rabbit:fanout-exchange name="zf.fanout">
            <rabbit:bindings>
                <rabbit:binding queue="zfQueue" ></rabbit:binding>
            </rabbit:bindings>
        </rabbit:fanout-exchange>
    <rabbit:listener-container connection-factory="rabbitConnFactory" concurrency="5">
                 <rabbit:listener queues="zfQueue" ref="messageConsumer" /> </rabbit:listener-container>
  • 相关阅读:
    URAL 2046 A
    URAL 2056 Scholarship 水题
    Codeforces Gym 100286I iSharp 水题
    Codeforces Gym H. Hell on the Markets 贪心
    Codeforces Gym 100286G Giant Screen 水题
    Codeforces Gym 100286B Blind Walk DFS
    Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
    Codeforces Gym 100286A. Aerodynamics 计算几何 求二维凸包面积
    Codeforces Gym 100418K Cards 暴力打表
    Codeforces Gym 100418J Lucky tickets 数位DP
  • 原文地址:https://www.cnblogs.com/zfzf1/p/6620052.html
Copyright © 2011-2022 走看看