范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

RabbitMQ消息的可靠性投递

  RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件),广泛微服务系统之间,服务之间消息异步投递。如何保证消息在投递过程的中可靠性呢。下面的文章我这里探讨一下。 服务端确认-Transaction模式。
  1.将chanel设置成事务模式。
  基于Java,api的设置方式。try {             channel.txSelect();             channel.queueDeclare("simple_queue", true, false, false, null);             //创建消息。             String message = "hello keelon";             //发送消息。             /**              * 1.消息要发送的交换机对象,不写使用默认default exchange              * 2.当前的路由地址。路由地址,可以写成队列地址              * 3.附加数据可以不写。              * 4.消息              */             channel.basicPublish("", "simple_queue", null, message.getBytes(StandardCharsets.UTF_8));             channel.txCommit();             connection.close();         }catch (Exception e){          }
  使用springBoot集成的方式。@Test void TestSendMessage(){     rabbitTemplate.setChannelTransacted(true);     rabbitTemplate.convertAndSend("item_topic_exchange","item.add","hello-springBootmq"); }
  服务端确认的事务方式,这个是阻塞的一条消息没有发送完毕。不能发送下一条消息,影响系统的性能。不建议使用。服务端确认-Confirm模式。
  //开启发送方确认的模式 channel.confirmSelect();  channel.basicPublish("fanout_exchange","",null,message.getBytes(StandardCharsets.UTF_8)); if (channel.waitForConfirms()){     System.out.print("消息发送成功"); } channel.close(); connection.close();
  2.异步确认的方式。channel.addConfirmListener(new ConfirmListener() {     @Override     public void handleAck(long deliveryTag, boolean multiple) throws IOException {         System.out.print("Brooker未确认消息,标识"+deliveryTag);         if (multiple){             //headerSet表示后面参数之前的参数全部删除             confirmset.headSet(deliveryTag+1L).clear();         }else {             confirmset.remove(deliveryTag);         }      }      @Override     public void handleNack(long deliveryTag, boolean multiple) throws IOException {          System.out.print(String.format("服务端已经确认消息,标识:%d,多个消息%b",deliveryTag));         if (multiple){             //headerSet表示后面参数之前的参数全部删除             confirmset.headSet(deliveryTag+1L).clear();         }else {             confirmset.remove(deliveryTag);         }      } });
  springBoot的集成的实现。rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {         @Override         public void confirm(CorrelationData correlationData, boolean ack, String cause) {                          if (!ack){                 System.out.println("发送消息失败:"+cause);                 throw new RuntimeException("发送消息失败:"+cause);                 //             }          }     });     rabbitTemplate.convertAndSend("item_topic_exchange","item.add","hello-springBootmq"); }路由保证
  在channel中添加listenner监听无法路由的消息。channel.addReturnListener(new ReturnListener() {     @Override     public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties basicProperties, byte[] bytes) throws IOException {        System.out.println("监听器收到无法路由,被返回的消息");     } }); 消息的持久化
  消息,交换机,队列的持久化处理。AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()         .deliveryMode(2)  //2代表持久化         .contentEncoding("UTF-8") //编码         .expiration("10000") //过期时间                  .build();RabbitMQ 集群
  RabbitMQ 最优秀的功能之一就是内建集群,这个功能设计的目的是允许消费者和生产者在节点崩溃的情况下继续运行,以及通过添加更多的节点来线性扩展消息通信吞吐量。RabbitMQ 内部利用 Erlang 提供的分布式通信框架 OTP 来满足上述需求,使客户端在失去一个 RabbitMQ 节点连接的情况下,还是能够重新连接到集群中的任何其他节点继续生产、消费消息。RabbitMQ 集群中的一些概念
  RabbitMQ 会始终记录以下四种类型的内部元数据:队列元数据
  包括队列名称和它们的属性,比如是否可持久化,是否自动删除交换器元数据
  交换器名称、类型、属性绑定元数据
  内部是一张表格记录如何将消息路由到队列vhost 元数据
  为 vhost 内部的队列、交换器、绑定提供命名空间和安全属性
  在单一节点中,RabbitMQ 会将所有这些信息存储在内存中,同时将标记为可持久化的队列、交换器、绑定存储到硬盘上。存到硬盘上可以确保队列和交换器在节点重启后能够重建。而在集群模式下同样也提供两种选择:存到硬盘上(独立节点的默认设置),存在内存中。
  如果在集群中创建队列,集群只会在单个节点而不是所有节点上创建完整的队列信息(元数据、状态、内容)。结果是只有队列的所有者节点知道有关队列的所有信息,因此当集群节点崩溃时,该节点的队列和绑定就消失了,并且任何匹配该队列的绑定的新消息也丢失了。还好RabbitMQ 2.6.0之后提供了镜像队列以避免集群节点故障导致的队列内容不可用。
  RabbitMQ 集群中可以共享 user、vhost、exchange等,所有的数据和状态都是必须在所有节点上复制的,例外就是上面所说的消息队列。RabbitMQ 节点可以动态的加入到集群中。
  当在集群中声明队列、交换器、绑定的时候,这些操作会直到所有集群节点都成功提交元数据变更后才返回。集群中有内存节点和磁盘节点两种类型,内存节点虽然不写入磁盘,但是它的执行比磁盘节点要好。内存节点可以提供出色的性能,磁盘节点能保障配置信息在节点重启后仍然可用,那集群中如何平衡这两者呢?
  RabbitMQ 只要求集群中至少有一个磁盘节点,所有其他节点可以是内存节点,当节点加入火离开集群时,它们必须要将该变更通知到至少一个磁盘节点。如果只有一个磁盘节点,刚好又是该节点崩溃了,那么集群可以继续路由消息,但不能创建队列、创建交换器、创建绑定、添加用户、更改权限、添加或删除集群节点。换句话说集群中的唯一磁盘节点崩溃的话,集群仍然可以运行,但知道该节点恢复,否则无法更改任何东西。RabbitMQ 集群配置和启动
  如果是在一台机器上同时启动多个 RabbitMQ 节点来组建集群的话,只用上面介绍的方式启动第二、第三个节点将会因为节点名称和端口冲突导致启动失败。所以在每次调用 rabbitmq-server 命令前,设置环境变量 RABBITMQ_NODENAME 和 RABBITMQ_NODE_PORT 来明确指定唯一的节点名称和端口。下面的例子端口号从5672开始,每个新启动的节点都加1,节点也分别命名为test_rabbit_1、test_rabbit_2、test_rabbit_3。
  启动第1个节点:RABBITMQ_NODENAME=test_rabbit_1 RABBITMQ_NODE_PORT=5672 ./sbin/rabbitmq-server -detached
  启动第2个节点:RABBITMQ_NODENAME=test_rabbit_2 RABBITMQ_NODE_PORT=5673 ./sbin/rabbitmq-server -detached
  启动第2个节点前建议将 RabbitMQ 默认激活的插件关掉,否则会存在使用了某个插件的端口号冲突,导致节点启动不成功。
  现在第2个节点和第1个节点都是独立节点,它们并不知道其他节点的存在。集群中除第一个节点外后加入的节点需要获取集群中的元数据,所以要先停止 Erlang 节点上运行的 RabbitMQ 应用程序,并重置该节点元数据,再加入并且获取集群的元数据,最后重新启动 RabbitMQ 应用程序。
  停止第2个节点的应用程序:./sbin/rabbitmqctl -n test_rabbit_2 stop_app
  重置第2个节点元数据:./sbin/rabbitmqctl -n test_rabbit_2 reset
  第2节点加入第1个节点组成的集群:./sbin/rabbitmqctl -n test_rabbit_2 join_cluster test_rabbit_1@localhost
  启动第2个节点的应用程序./sbin/rabbitmqctl -n test_rabbit_2 start_app
  第3个节点的配置过程和第2个节点类似:RABBITMQ_NODENAME=test_rabbit_3 RABBITMQ_NODE_PORT=5674 ./sbin/rabbitmq-server -detached  ./sbin/rabbitmqctl -n test_rabbit_3 stop_app  ./sbin/rabbitmqctl -n test_rabbit_3 reset  ./sbin/rabbitmqctl -n test_rabbit_3 join_cluster test_rabbit_1@localhost  ./sbin/rabbitmqctl -n test_rabbit_3 start_app RabbitMQ 集群运维
  停止某个指定的节点,比如停止第2个节点:RABBITMQ_NODENAME=test_rabbit_2 ./sbin/rabbitmqctl stop
  查看节点3的集群状态:./sbin/rabbitmqctl -n test_rabbit_3 cluster_status
  作者:预流
  链接:https://www.jianshu.com/p/79ca08116d57
  来源:简书
  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

桁架上下料在使用时需要注意什么?随着国内工业自动化的快速发展,桁架上下料在工业生产中,得到了广泛的应用,由于在日常使用桁架上下料的过程中,会遇到各种各样的问题,给企业造成一些不必要的损失,那么该如何避免和解决这些机器人第七轴的主要特点机器人第七轴采用线性滑轨可增加作业空间或在机器人作业区移动工件和工具,如给多台设备或辅助工装,从货盘系列中进行货品组合作业以及在大型部件上作业等等。线性滑轨的控制装置是作为数学耦合滚轮导轨和直线导轨有哪些区别?导轨可承受固定引导移动的装置或设备,并减少其摩擦的装置。而通常直线来回往复的运动场合,如引导固定机械部件专用设备仪器等都可应用导轨。滚动导轨比直线轴承有更高的额定负载,同时可承担一滚轮导轨与滚珠导轨的区别1对恶劣生产环境的适应性高滚轮导轨中轴承的滚动体并不直接接触,而且轴承具有很好的密封性库比克的V型导向技术,使得V型滚轮通过刮擦运动,可以把灰尘切屑等杂质从V型导轨面上刮除,保持VCUBIC直角坐标机器人顾名思义,就是一种以空间几何关系沿XYZ方向所形成的立体空间作为工作空间的一种工业自动化机器人设备。该设备在工业应用中,可以通过不同的程序进行设定,实现自动控制,形成多用途的操作机CUBIC单机机床上下料数控车床自动上下料机械手,又称CNC机械手自动送料机械手,是指对数控车床的加工件进行自动上下料自动装夹自动吹屑并将完工件自动送回料仓等连续性动作的自动化装备,完全代替了人工操作,最解析线性模组的特点和广泛应用线性模组也叫直线模组电动模组单轴机械手数控滑台。尽管相较于别的多关节机械手,线性模组十字滑台作用尽管有点儿单调,可是也是保持自动化技术的至关重要产品,是很多自动化机械都需求应用领域星途揽月上市,有跟汉兰达叫板的实力吗?星途品牌作为奇瑞推出的高端品牌,自2018年首款产品上市以来,旗下已经拥有三款车型。自主品牌高端化已经走过了几个年头,例如长城旗下的WEY品牌吉利旗下的领克品牌等等。都是在合资品牌日产新车刚买就要换发动机!车主换车遭拒4S店扣字眼买车最怕的就是,买回家不久,又要回4S店。而浙江嘉兴桐乡的车主陈先生,就遇到了这样的烦心事。新车刚开出一公里,发动机就报故障吗。而今甚至还要换发动机,着实令他相当无奈。据报道,陈先全新哈弗H6S正式上市售13。89万起杀入轿跑SUV领域人民车市讯,10月30日,长城汽车官方宣布全新哈弗H6S正式上市,新车共推出5款车型,指导价区间为13。8916。49万元。作为柠檬平台下哈弗家族的首款轿跑SUV,哈弗H6S采用了5G通信能力第一!中国移动报告5G通信指数榜FindX3实力登顶在5G技术快速发展的当下,大多数的5G手机已经可以给消费者带来不错的体验,市面上的5G手机也越来越多。日前,中国移动发布了2021年智能硬件质量报告,对5G手机等产品进行了专业评测
大东话安全丨全量模型丢失,到底谁之过?一小白剧场大东小白,你看起来心情不太好啊。小白东哥,我做课程作业的时候执行了一个rmrf命令,删掉之后才发现目录指定错了,好几个系统文件丢失,系统时不时地报错。大东小白,你也真的是Windows1011系统下载安装(包括云重装)激活上个月介绍了Windows10系统安装的各种方法(也适用于Windows11)。不仅仅提供操作步骤,还简要地阐述了安装系统的原理。今天将上述内容做一个简单的汇总整理说明,并再提供一5000元档!5款超长续航笔记本推荐差旅生活好帮手电池寿命和续航能力是我们选择笔记本电脑的关键指标之一。游戏本打游戏时一般都会接电源,当然说笔记本的续航能力一般都是说轻薄笔记本电脑,哪些笔记本电脑的续航能强呢,下面来给大家介绍10宇宙年龄只有140多亿年,宽度却有920亿光年,这是不是一个悖论?啊呀,这个题目提醒我了一下,我家的小狗快1岁了,居然有40厘米长了,这不是明显是个悖论吗言归正传,这个题目的内容里有几个含义首先,光年是个距离概念,而年是个时间概念,也就是说,宇宙红米Note11Pro搭载骁龙870来袭,6000mAh120W,有12256G版本红米作为小米品牌主打中端市场的一个子品牌,在手机界中拥有众多受众群体。近两年在卢伟冰的带领下,更是发展得如火如荼。红米品牌开发的两个系列产品,K系列以及Note系列凭借其极高性价比销量低迷跌出月销排行榜前三,蔚来还能重新找回状态吗?转眼进入9月,又到了开学的日子,家长们长舒一口气,终于可以送走神兽了。迈入校园的学生却开心不起来,游戏还没通关,作业还没做完,想为假期充个值。新的一个月,意味着造车新势力也需要交出87周报阿里成立VR设备制造公司腾讯投资VR游戏开发商威魔纪元本周(8。309。5)热点2021年东京电玩展将推出VR版阿里巴巴成立科技新公司,经营范围含VR设备制造等入局VR游戏领域,腾讯投资VR游戏开发商威魔纪元爱奇艺奇遇3VR一体机正式iPhone13Pro的内存组合遭遇吐槽,苹果公司赚钱的ampampquot新方式ampampquot无底线全新一代的iPhone13将在近期跟大家见面,都说有了十三香的理论,这款产品一定是一款非常优秀,销量非常出众的产品,但是产品还没有上市的时候,苹果就已经想好了如何从用户手中赚取更多选出中国最牛的5名科学家,你会选谁?首先声明,中国出了很多著名的科学家,他们都很伟大,都值得我们民族的仰慕和尊敬。所以这的确是很难选择的,如果让我选直接最牛的5位科学家,我会首先设定一个标准,怎么算最牛我认为所谓最牛哈啰酒店已具雏形,但行业困局依旧亟待解决作为共享单车行业中为数不多存活下来的平台,哈啰出行尽管在此前已经宣布放弃赴美上市,但其在业务端的拓展也早已使得其不再只局限于共享单车。而无论共享电单车顺风车,还是电动车等出行类业务欢太科技布局万物互融,多元化产品全面绽放自从2019年正式进入5G商用元年,在AI5G大数据等先进技术以及广大科技企业推动下,万物互融的概念也从抽象化走向具体化。作为互联网科技头部企业,在这个万物互融的时代,欢太科技凭借