栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

消息中间件之RabbitMQ(四):集群搭建以及一些其他知识

消息中间件之RabbitMQ(四):集群搭建以及一些其他知识

集群搭建

比较简单,有空再尝试搭建,大概步骤如下准备3台rabbitmq保证相互之间可以ping通,最好修改hostname便于分辨复制 erlang 的 cookie(RabbitMQ 集群需要在每个从节点上使用与主节点一样的 ErLang cookie),参考如下:

scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

重启3台mqnode2执行相关命令加入node1,node3加入node2任意一台mq上查看集群状态,ok创建账户、设置角色、权限等解除某个节点,执行相关命令即可 配置镜像队列

默认搭好的集群,每个节点之间,数据是不同步的,需要配置镜像队列在管理界面添加策略:保持集群中始终有2台机器数据自动同步,所有创建的队列必须带上指定前缀才生效

Nginx+Keepalived实现MQ负载均衡+HA

MQ默认不支持负载均衡,需要配合Nginx或HAProxy实现负载均衡,如果要两台Nginx,则还需要使用Keepalived实现Nginx的HA以及虚拟IP,最终用户通过虚拟IP就可以负载均衡到所有MQ节点有空再实战,架构图如下:

备份交换机

对于已经到达队列但无法被正常消费的消息,可以设置死信队列来存储这些消息但是对于不可路由的消息,根本没有机会进入到队列,因此无法使用死信队列在 RabbitMQ 中,有一种备份交换机的机制存在,可以很好的应对这个问题备份交换机就是用于处理无法被普通交换机路由的消息需要注意:当同时设置了消息回退机制和备份交换机时,会优先采用备份交换机下图中,无法路由的消息将通过备份交换机发送给告警队列,示意图:

核心配置:

//声明确认交换机的备份交换机
@Bean
public DirectExchange /confirm/iExchange() {
    ExchangeBuilder exchangeBuilder = ExchangeBuilder.directExchange(/confirm/i_EXCHANGE_NAME)
        .durable(true)
        .alternate(BACKUP_EXCHANGE_NAME);//设置该交换机的备份交换机
        //.withArgument("alternate-exchange", BACKUP_EXCHANGE_NAME);
    return exchangeBuilder.build();
}

告警队列消费者:

@RabbitListener(queues = WARNING_QUEUE_NAME)
public void receiveWarningMsg(Message message) {
    String msg = new String(message.getBody());
    log.warn("报警发现不可路由消息:{}", msg);
}
优先队列

是指队列中的消息具备优先级,优先级高的消息将先被消费使用场景:订单催付,大客户先催付创建队列时指定参数:QueueBuilder.durable(WARNING_QUEUE_NAME).maxPriority(10).build()(优先级在0-255之间)发送消息时指定优先级即可 惰性队列

惰性队列会尽可能的将消息存入磁盘中,而在消费者消费到相应的消息时才会被加载到内存中当消费者由于各种各样的原因(比如消费者下线、宕机亦或者是由于维护而关闭等)而致使长时间内不能消费消息造成堆积时,惰性队列就很有必要了在创建队列时设置即可:QueueBuilder.durable(BACKUP_QUEUE_NAME).lazy().build();MQ从 3.6.0 版本引入了惰性队列的概念 Federation exchange 和 shovel

有空再学

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号