• RabbitMQ


    以前在单项目中用过RabbitMQ,没有问题

    不过这次在分布式项目中使用RabbitMQ中有点搞糊涂了,但是实际上是没有问题的,思路清晰就行

    简单看一下实际操作的示例吧: 

    资源文件中需要配置基本的rabbitMQ的属性,如下:

    1 #rabbitmq config
    2 rabbitmq.host=192.168.1.188
    3 rabbitmq.port=5672
    4 rabbitmq.username=lee
    5 rabbitmq.password=lee
    6 rabbitmq.vhost=danger

    然后要配置applicationContext-rabbitmq.xml,这个文件需要新建,当然你也可以在你的service.xml中编写,但是为了配置清晰嘛

    内容如下:

     1     <!-- 定义RabbitMQ的连接工厂 -->
     2     <rabbit:connection-factory id="connectionFactory"
     3         host="${rabbitmq.host}" 
     4         port="${rabbitmq.port}" 
     5         username="${rabbitmq.username}" 
     6         password="${rabbitmq.password}"
     7         virtual-host="${rabbitmq.vhost}" />
     8         
     9     <!-- 定义消息管理员 -->
    10     <rabbit:admin connection-factory="connectionFactory"/>
    11     
    12     <!-- 生产者需要以下 -->
    13     <!-- 定义交换机 -->
    14     <rabbit:topic-exchange name="rest-content-exchange" durable="true" auto-declare="true">
    15         <!-- 如果是2个不同的系统进行通知,那就手动在管理后台进行绑定 -->
    16         <rabbit:bindings>
    17             <rabbit:binding queue="rest-sms-queue" pattern="rest.sms.#"/>
    18             <rabbit:binding queue="rest-jpush-queue" pattern="rest.jpush.#"/>
    19             <rabbit:binding queue="rest-sysmsg-queue" pattern="rest.sysmsg.#"/>
    20         </rabbit:bindings>
    21     </rabbit:topic-exchange>
    22     
    23     <!-- 定义rabbitTemplate -->
    24     <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="rest-content-exchange"/>
    25     
    26     
    27     <!-- 消费者需要以下 -->
    28     <!-- 定义队列 -->
    29     <rabbit:queue name="rest-sms-queue" durable="true" auto-declare="true"/>
    30     <rabbit:queue name="rest-jpush-queue" durable="true" auto-declare="true"/>
    31     <rabbit:queue name="rest-sysmsg-queue" durable="true" auto-declare="true"/>
    32     
    33     <!-- 消费者 -->
    34     <bean id="smsHandler" class="com.dingli.components.mq.handler.SmsHandler"></bean>
    35     <bean id="jpushHandler" class="com.dingli.components.mq.handler.JpushHandler"></bean>
    36     <bean id="saveSysMsgHandler" class="com.dingli.components.mq.handler.SaveSysMsgHandler"></bean>
    37     
    38     <!-- 队列监听 -->
    39     <!-- TODO 注释了后台不会滚动显示 -->
    40     <rabbit:listener-container connection-factory="connectionFactory" acknowledge="none" >
    41         <rabbit:listener ref="smsHandler" method="excute" queue-names="rest-sms-queue" />
    42         <rabbit:listener ref="jpushHandler" method="excute" queue-names="rest-jpush-queue" />
    43         <rabbit:listener ref="saveSysMsgHandler" method="saveMsgExcute" queue-names="rest-sysmsg-queue" />
    44     </rabbit:listener-container>

    这里需要注意acknowledge,这个属性默认是auto,如果消费者报错了,会一直报错,因为他是轮询监听的,可以修改为none或者manul

    再看看实现的消费者以及助手类,助手类可以理解为service

    监听3个routing-key

     1 @Component
     2 public class SendMsgRestProducerImpl implements SendMsgRestProducer {
     3 
     4     @Autowired    
     5     private RabbitTemplate rabbitTemplate;
     6     
     7     @Override
     8     public void sendSMS(String mqSMSMessageJson) {
     9         rabbitTemplate.convertAndSend("rest.sms.send", mqSMSMessageJson);
    10     }
    11 
    12     @Override
    13     public void jpushContent(String mqJPushMessageJson) {
    14         rabbitTemplate.convertAndSend("rest.jpush.send", mqJPushMessageJson);
    15     }
    16 
    17     @Override
    18     public void saveContent(String mqSysMessageJson) {
    19         rabbitTemplate.convertAndSend("rest.sysmsg.send", mqSysMessageJson);
    20     }
    21     
    22 }

    这样,直接调用componentImpl就行了!并且这3个都是异步的

    为什么要使用RabbitMQ,那就是效率问题,有些主流程实现后,附流程你不在乎,成功不成功不影响,顶多重发一次,这样的业务可以使用消息队列

    当然也有更多更复杂的也需要用的,这里的业务场景就比较简单了,好吧,看官们亲拍~

  • 相关阅读:
    HTML中visibility:hidden 和 display:none 的区别及实例?
    新手css学习
    关于新手html的认识
    学习前端第一天(上午)
    0528学习笔记
    愉快的一天
    今日份学习的快乐
    javascript(2)
    javascript
    CSS基础(2)
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5649893.html
Copyright © 2020-2023  润新知