Rabbitmq
应用场景
异步、解耦、削峰、发布订阅、事物一致性等等
windows集群搭建
1.下载erlang、rabbitmq
2.配置环境变量ERLANG_HOME、RABBITMQ_BASE
3.统一erlang.cookie
4.在hosts文件中增加节点名称和对应的ip配置
5.逐个修改rabbitmq节点的配置文件
1).etc目录下修改config文件的监听listener
2).sbin目录下的rabbitmq-env.bat
6.逐个启动节点并打开管理界面
7.把从节点集群到主节点
最后访问管理界面127.0.0.1:15672来验证搭建是否成功
至此,搭建完成。
Rabbitmq demo
说明:demo搭建为springboot
1、导入maven依赖
2、配置rabbitmq基本信息
3、编写RabbitConfig类,类里面设置很多个EXCHANGE,QUEUE,ROUTINGKEY,是为了接下来的不同使用场景。
4.生产者
5.消费者
启动项目后,可以从管理界面看到项目中声明的bean:
交换机
队列
测试debug
结果:
另外的模式就不一一去做了
补充几点:
1、TTL(Time To Live)
队列的过期时间决定了在没有任何消费者以后,队列可以存活多久。
有两种设置方式:
通过队列属性设置消息过期时间:
Map<String,Object>argss=newHashMap<String,Object>();argss.put("x-message-ttl",6000);
channel.queueDeclare("TEST_TTL_QUEUE",false,false,false,argss);
2、死信队列
有三种情况消息会进入DLX(Dead Letter Exchange)死信交换机。
1)、(NACK || Reject ) && requeue == false
2)、消息过期
3)、队列达到最大长度(先入队的消息会被发送到DLX)
可以设置一个死信队列(Dead Letter Queue)与DLX绑定,即可以存储Dead Letter,消费者可以监听这个队列取走消息。
3、优先级队列
设置一个队列的最大优先级:
发送消息时指定消息当前的优先级:
优先级高的消息可以优先被消费,但是:只有消息堆积(消息的发送速度大于消费者的消费速度)的情况下优先级才有意义。
4、延迟队列
可用死性队列实现
5、RPC
两个队列