分布式应用解耦利器rabbitmq

消息能够使应用连接和扩展,作为分布式架构中一大组件使用,消息是异步的能够分离发送数据和接收数据,达到应用的解耦;
使用消息的基本特性是能够无阻塞的发送消息,异步化处理应用调用逻辑,基本模式发布订阅功能,或者是工作队列模式
rabbitmq 是一个消息代理中间件
rabbitmq有六种工作模式,简单模式,work模式,发布订阅模式、路由模式,主题模式,RPC,在项目实践中,rabbitmq的RPC功能一般不使用,有专业的RPC中间件替代,剩下的实质就两种模式较为广泛使用,work和订阅模式,根据需求的实际场景进行选择
如果消息是只允许一消费一次就用work模式,如果消息是允许指定的多消费者使用就使用直接、路由、主题模式


work模式:
当把消息封装到队列后,后台的任务进程从队列里那消息进行消费,后台可以跑多个任务进程,队列的消息对它们来说是共享的。

work模式有轮询分发和公平分发

轮询分发是通过轮询平均分发到后台消费者,这种方式如果由于其中一消费者进程处理缓慢会导致整体性能下降。

公平分发是通过确认每个消费者发送确认消息后才进行分发消息,这样能很好的平衡性能。通过设置int prefetchCount = 1;channel.basicQos(prefetchCount);完成



订阅模式:
work模式之允许发送消息给一个消费者,而订阅模式可以发送一个消息给多个消费者。
订阅模式是通过队列绑定到交换机,由交换机告诉生产者发送消息到指定队列。交换机的类型有fanout,direct、topic。
fanout交换机没有路由键值
direct交换机有唯一路由键值
topic交换机通过通配符指定路由键值,最灵活。使用最广泛!


通过消息通知管理和消息持久化保证消息不丢失:
当客户端任务进程拿到任务执行时有异常导致消失丢失,消息通知管理机制保证消息的不丢失,它是通过客户端发送确认消息通知rabbitmq的,如果发送端接收不到客户端的消失确认会马上重新发起消息。设置autoAck =false通过后台任务进程手动发送关闭消息,
而持久化能够保证rabbitmq退出或崩溃后消息不丢失。通过MessageProperties.PERSISTENT_TEXT_PLAIN设置持久化


rabbitmq集群
rabbitmq操作的所有数据和状态都可以复制到集群所有节点,除了队列
集群配置方式:通过客户端工具,配置文件声明
故障处理:可以任意启动和停止集群各阶段,不建议在wlan进行集群,推荐在lan中进行
硬盘还是内存:虽然内存节点能使交换机、队列、提高性能,但不可靠,推荐所有节点为硬盘节点。
相同的Erlang Cookie确保集群所有节点的互相通信
通过负载均衡器连接rabbitmq集群,如:HAProxy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值