当前位置: 首页 > news >正文

网站建设中页面下载公司网站开发费用计入

网站建设中页面下载,公司网站开发费用计入,中山建设局网站,白名单查询网站RabbitMQ持久化 如何保障当 RabbitMQ 服务停掉以后消 息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时#xff0c;它忽视队列 和消息#xff0c;除非告知它不要这样做。确保消息不会丢失需要做两件事#xff1a;我们需要将队列和消息都标记为…RabbitMQ持久化 如何保障当 RabbitMQ 服务停掉以后消 息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时它忽视队列 和消息除非告知它不要这样做。确保消息不会丢失需要做两件事我们需要将队列和消息都标记为持久化 队列如何实现持久化 之前我们创建的队列都是非持久化的RabbitMQ如果重启的话该队列就会被删除如果要实现队列持久化需要在声明队列的时候把durable参数设置持久化 但是需要注意的就是如果之前声明的队列不是持久化的需要把原先队列先删除或者重新 创建一个持久化的队列不然就会出现错误 以下是控制台中持久化与非持久化队列的UI显示区当Features列显示为D代表是持久化队列 消息实现持久化 要想让消息实现持久化需要在消息生产者修改代码MessageProperties.PERSISTENT_TEXT_PLAIN 添加这个属性 生产者代码 /* * 消息再手动应答不丢失、放回消息队列重新消费*/ public class Task2 {//队列名称public static final String TASK_QUEUE_NAME ack_queue;public static void main(String[] args) throws IOException, TimeoutException {Channel channel RabbitMqUtils.getChannel();/**生成一个队列* 1.队列名称* 2.队列里面的信息是否持久化磁盘默认情况时在内存* 3.该队列是否只供一个消费者进行消费 是否消费共享 true是允许* 4.是否自动删除 最后一个消费者断开连接之后 该队列是否自动删除 true自动删除 false不自动删除* 5.其他参数 延迟消息等*/channel.queueDeclare(TASK_QUEUE_NAME,true,false,false,null);//从控制台中输入信息Scanner scanner new Scanner(System.in);while(scanner.hasNext()){String message scanner.next();channel.basicPublish(,TASK_QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes(UTF-8));System.out.println(生产者发出消息message);}} } 将消息标记为持久化并不能完全保证不会丢失消息。尽管它告诉 RabbitMQ 将消息保存到磁盘但是 这里依然存在当消息刚准备存储在磁盘的时候 但是还没有存储完消息还在缓存的一个间隔点。此时并没有真正写入磁盘。持久性保证并不强但是对于我们的简单任务队列而言这已经绰绰有余了 不公平分发 在最开始的时候我们学习到 RabbitMQ 分发消息采用的轮训分发但是在某种场景下这种策略并不是 很好比方说有两个消费者在处理任务其中有个消费者 1 处理任务的速度非常快而另外一个消费者 2 处理速度却很慢这个时候我们还是采用轮训分发的化就会到这处理速度快的这个消费者很大一部分时间 处于空闲状态而处理慢的那个消费者一直在干活这种分配方式在这种情况下其实就不太好但是 RabbitMQ 并不知道这种情况它依然很公平的进行分发。为了避免这种情况我们可以设置参数 channel.basicQos(1)将想要不公平分发的消费者设置该参数 消费者01代码如下 public class Work01 {private static final String ACK_QUEUE_NAME ack_queue;public static void main(String[] args) throws IOException {Channel channel RabbitMqUtils.getChannel();System.out.println(C1等待接收消息短);//消息消费的时候如何处置消息DeliverCallback deliverCallback (consumerTag,delivery)-{String message new String(delivery.getBody());SleepUtils.sleep(1);System.out.println(接收到消息:message);/*** 1.消息标记tag* 2.是否批量应答未应答的消息*/channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);};//取消消息的回调CancelCallback cancelCallback consumerTag-{System.out.println(消息消费被中断);};/*** 消费者信息* 1.消费哪个队列* 2.消费成功之后是否要自动应答 true自动应答 false手动应答* 3.消费者微车才能更改消费的回调* 4.消费者取消消费回调*/boolean autoAck false;//设置不公平分发channel.basicQos(1);channel.basicConsume(ACK_QUEUE_NAME,autoAck,deliverCallback,cancelCallback);} } 消费者02代码如下 public class Work02 {private static final String ACK_QUEUE_NAME ack_queue;public static void main(String[] args) throws IOException {Channel channel RabbitMqUtils.getChannel();System.out.println(C2等待接收消息长);//消息消费的时候如何处置消息DeliverCallback deliverCallback (consumerTag,delivery)-{String message new String(delivery.getBody());SleepUtils.sleep(30);System.out.println(接收到消息:message);/*** 1.消息标记tag* 2.是否批量应答未应答的消息*/channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);};//取消消息的回调CancelCallback cancelCallback consumerTag-{System.out.println(消息消费被中断);};/*** 消费者信息* 1.消费哪个队列* 2.消费成功之后是否要自动应答 true自动应答 false手动应答* 3.消费者微车才能更改消费的回调* 4.消费者取消消费回调*/boolean autoAck false;//设置不公平分发channel.basicQos(1);channel.basicConsume(ACK_QUEUE_NAME,autoAck,deliverCallback,cancelCallback);} } 效果展示 预取值 本身消息的发送就是异步发送的所以在任何时候channel 上肯定不止只有一个消息另外来自消费 者的手动确认本质上也是异步的。因此这里就存在一个未确认的消息缓冲区因此希望开发人员能限制此 缓冲区的大小以避免缓冲区里面无限制的未确认消息问题。这个时候就可以通过使用 basic.qos 方法设 置“预取计数”值来完成的。该值定义通道上允许的未确认消息的最大数量。一旦数量达到配置的数量 RabbitMQ 将停止在通道上传递更多消息除非至少有一个未处理的消息被确认例如假设在通道上有 未确认的消息 5、6、78并且通道的预取计数设置为 4此时 RabbitMQ 将不会在该通道上再传递任何 消息除非至少有一个未应答的消息被 ack。比方说 tag6 这个消息刚刚被确认 ACKRabbitMQ 将会感知 这个情况到并再发送一条消息。消息应答和 QoS 预取值对用户吞吐量有重大影响。通常增加预取将提高 向消费者传递消息的速度。虽然自动应答传输消息速率是最佳的但是在这种情况下已传递但尚未处理 的消息的数量也会增加从而增加了消费者的 RAM 消耗(随机存取存储器)应该小心使用具有无限预处理 的自动确认模式或手动确认模式消费者消费了大量的消息如果没有确认的话会导致消费者连接节点的 内存消耗变大所以找到合适的预取值是一个反复试验的过程不同的负载该值取值也不同 100 到 300 范 围内的值通常可提供最佳的吞吐量并且不会给消费者带来太大的风险。预取值为 1 是最保守的。当然这 将使吞吐量变得很低特别是消费者连接延迟很严重的情况下特别是在消费者连接等待时间较长的环境 中。对于大多数应用来说稍微高一点的值将是最佳的
http://www.pierceye.com/news/57505/

相关文章:

  • 广东中山建设信息网站栾城区住房建设局官方网站
  • 深圳网站设计公司龙岗云服务器和普通服务器的区别
  • 营销型网站需要注意dede查看网站源码
  • 泰安网站建设报价不做百度推广网站关键词被屏蔽
  • 广州网站建设新科分公司如何修改网站
  • 网络推广目标计划合肥关键词优化平台
  • 微网站设计企业中文网站建设制作
  • 合山网站建设网站域名好了下一步
  • 网站备案多久可以注销家居网站应该怎么做
  • 小型的电商网站有哪些业绩显示屏 东莞网站建设技术支持
  • 瀑布流网站有哪些铜仁北京网站建设
  • 盐城做网站网络公司电话?微信公司
  • wordpress wp自己建设的网站如何优化
  • 深圳网站开发建设培训市场调研与分析
  • 扬州大学第四届网站建设评比网页设计素材怎么算侵权
  • 巴中微信网站建设网站托管共享服务器费用一年多少钱
  • 学做网站怎么样北京百度公司地址在哪里
  • 襄阳建设21网站网站推广服务商
  • 建站行业市场分析手机响应式网站开发模板之家
  • 做oa系统的网站怎么查询公司是不是中小企业
  • 网站优化是在哪里做修改省财政厅门户网站三基建设
  • 多后缀域名查询网站wordpress 非插件cdn
  • 网站建设空间怎么租用百度一键安装
  • 网站开发技术发展史wordpress向微信群发送内容
  • 设计找图网站免费建站的方法
  • dede电影网站模板下载怎样把网站建设在国外
  • 深圳罗湖企业网站推广机械加工订单
  • html网页设计代码购物网站建设网站要多久到账
  • 南宁建设网站哪里好接外包项目
  • 国外免费网站空间字体设计免费版在线立即生成