怎么做网站劳务中介wordpress essential

张小明 2026/1/3 0:10:33
怎么做网站劳务中介,wordpress essential ,北京旅行社网站建设公司,网络营销与策划1.生产者和消费者确认机制 确认机制的本质#xff1a;明确告诉对方#xff1a;消息已经安全到达/已经被成功处理 如果没有确认机制#xff1a;生产者不知道消息有没有发成功消费者不知道消息有没有处理成功系统只能“猜”#xff0c;必然丢消息在消息队列中#xff0c;生产…1.生产者和消费者确认机制确认机制的本质明确告诉对方消息已经安全到达/已经被成功处理如果没有确认机制生产者不知道消息有没有发成功消费者不知道消息有没有处理成功系统只能“猜”必然丢消息在消息队列中生产者和消费者确认机制是确保消息可靠传递的关键。主要有两种确认机制生产者确认当消息成功发送到交换器后交换器会返回确认给生产者确保消息的发送成功。消费者确认当消息被成功消费后消费者会向交换器发送确认回执确保消息的消费完成。这两种机制有助于解决消息丢失的问题确保在分布式系统中消息的可靠性和安全性2.RabbitMQ的生产者确认机制一般情况下只要生产者与MQ之间的网络连接顺畅基本不会出现发送消息丢失的情况因此大多数情况下我们无需考虑这种问题。不过在少数情况下也会出现消息发送到MQ之后丢失的现象比如MQ内部处理消息的进程发生了异常生产者发送消息到达MQ后未找到Exchange生产者发送消息到达MQ的Exchange后未找到合适的Queue因此无法路由针对上述情况RabbitMQ提供了生产者消息确认机制包括Publisher Confirm和Publisher Return两种。在开启确认机制的情况下当生产者发送消息给MQ后MQ会根据消息处理的情况返回不同的回执。具体如图所示总结如下当消息投递到MQ但是路由失败时通过Publisher Return返回异常信息同时返回ack的确认信息代表投递成功临时消息投递到了MQ并且入队成功返回ACK告知投递成功持久消息投递到了MQ并且入队完成持久化返回ACK 告知投递成功其它情况都会返回NACK告知投递失败其中ack和nack属于Publisher Confirm机制ack是投递成功nack是投递失败。而return则属于Publisher Return机制。默认两种机制都是关闭状态需要通过配置文件来开启。开启生产者确认spring:rabbitmq:publisher-confirm-type:correlated# 开启publisher confirm机制并设置confirm类型publisher-returns:true# 开启publisher return机制publisher-confirm-type 有三种模式none关闭 confirm 机制simple以同步阻塞等待的方式返回 MQ 的回执消息correlated以异步回调方式的方式返回 MQ 的回执消息每个 RabbitTemplate 只能配置一个 ReturnCallbackJava代码实现① Maven 依赖dependencygroupIdcom.rabbitmq/groupIdartifactIdamqp-client/artifactIdversion5.16.0/version/dependency② 生产者代码Confirm Returnimportcom.rabbitmq.client.*;publicclassRabbitProducerConfirmDemo{privatestaticfinalStringEXCHANGEdemo.exchange;privatestaticfinalStringROUTING_KEYdemo.key;publicstaticvoidmain(String[]args)throwsException{ConnectionFactoryfactorynewConnectionFactory();factory.setHost(localhost);Connectionconnectionfactory.newConnection();Channelchannelconnection.createChannel();// 开启 confirm 模式channel.confirmSelect();// Confirm 回调消息是否到达 Brokerchannel.addConfirmListener((deliveryTag,multiple)-System.out.println(消息发送成功tagdeliveryTag),(deliveryTag,multiple)-System.out.println(消息发送失败tagdeliveryTag));// Return 回调路由失败channel.addReturnListener(returnMessage-System.out.println(路由失败newString(returnMessage.getBody())));channel.exchangeDeclare(EXCHANGE,BuiltinExchangeType.DIRECT,true);Stringmsghello rabbit confirm;channel.basicPublish(EXCHANGE,ROUTING_KEY,true,// mandatoryMessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes());System.out.println(消息已发送);}}confirmSelect()开启生产者确认Confirm保证消息写入 BrokerReturn保证消息路由正确3.RabbitMQ的消费者确认机制为了确认消费者是否成功处理消息RabbitMQ提供了消费者确认机制Consumer Acknowledgement。即当消费者处理消息结束后应该向RabbitMQ发送一个回执告知RabbitMQ自己消息处理状态。回执有三种可选值ack成功处理消息RabbitMQ从队列中删除该消息nack消息处理失败RabbitMQ需要再次投递消息reject消息处理失败并拒绝该消息RabbitMQ从队列中删除该消息一般reject方式用的较少除非是消息格式有问题那就是开发问题了。因此大多数情况下我们需要将消息处理的代码通过try catch机制捕获消息处理成功时返回ack处理失败时返回nack.由于消息回执的处理代码比较统一因此SpringAMQP帮我们实现了消息确认。并允许我们通过配置文件设置ACK处理方式有三种模式none不处理。即消息投递给消费者后立刻ack消息会立刻从MQ删除。非常不安全不建议使用manual手动模式。需要自己在业务代码中调用api发送ack或reject存在业务入侵但更灵活auto自动模式。SpringAMQP利用AOP对我们的消息处理逻辑做了环绕增强当业务正常执行时则自动返回ack. 当业务出现异常时根据异常判断返回不同结果如果是业务异常会自动返回nack如果是消息处理或校验异常自动返回reject;返回Reject的常见异常有Starting with version 1.3.2, the default ErrorHandler is now a ConditionalRejectingErrorHandler that rejects (and does not requeue) messages that fail with an irrecoverable error. Specifically, it rejects messages that fail with the following errors:o.s.amqp…MessageConversionException: Can be thrown when converting the incoming message payload using a MessageConverter.o.s.messaging…MessageConversionException: Can be thrown by the conversion service if additional conversion is required when mapping to a RabbitListener method.o.s.messaging…MethodArgumentNotValidException: Can be thrown if validation (for example, Valid) is used in the listener and the validation fails.o.s.messaging…MethodArgumentTypeMismatchException: Can be thrown if the inbound message was converted to a type that is not correct for the target method. For example, the parameter is declared as MessageFoo but MessageBar is received.java.lang.NoSuchMethodException: Added in version 1.6.3.java.lang.ClassCastException: Added in version 1.6.3.通过下面的配置可以修改SpringAMQP的ACK处理方式spring:rabbitmq:listener:simple:acknowledge-mode:manual # 手动处理Java代码实现RabbitMQ消费者默认情况下是自动确认这里就不给代码演示了RabbitMQ 消费者确认手动 ACK先处理业务再ACKimportcom.rabbitmq.client.*;publicclassRabbitConsumerAckDemo{privatestaticfinalStringQUEUEdemo.queue;publicstaticvoidmain(String[]args)throwsException{ConnectionFactoryfactorynewConnectionFactory();factory.setHost(localhost);Connectionconnectionfactory.newConnection();Channelchannelconnection.createChannel();channel.queueDeclare(QUEUE,true,false,false,null);// 手动 ACKbooleanautoAckfalse;channel.basicConsume(QUEUE,autoAck,(consumerTag,message)-{try{StringmsgnewString(message.getBody());System.out.println(收到消息msg);// 模拟业务处理if(msg.contains(error)){thrownewRuntimeException(业务异常);}// 业务成功 → ACKchannel.basicAck(message.getEnvelope().getDeliveryTag(),false);}catch(Exceptione){// 业务失败 → NACK重新入队 or DLQchannel.basicNack(message.getEnvelope().getDeliveryTag(),false,true// 是否重新入队);}},consumerTag-{});}}4.kafka的生产者确认机制Kafka 的确认由acks参数控制。ACK0这是最不可靠的模式。生产者在发送消息后不会等待来自服务器的确认。这意味着消息可能会在发送之后丢失而生产者将无法知道它是否成功到达服务器。ACK1这是默认模式也是一种折衷方式。在这种模式下生产者会在消息发送后等待来自分区领导者(leader的确认但不会等待所有副本replicas的确认。这意味着只要消息被写入分区领导者生产者就会收到确认。如果分区领导者成功写入消息但在同步到所有副本之前宕机消息可能会丢失。ACK-1这是最可靠的模式。在这种模式下生产者会在消息发送后等待所有副本的确认。只有在所有副本都成功写入消息后生产者才会收到确认。这确保了消息的可靠性但会导致更长的延迟。Java代码实现① Maven 依赖dependencygroupIdorg.apache.kafka/groupIdartifactIdkafka-clients/artifactIdversion3.6.0/version/dependency② Kafka 生产者代码acksallISR 全部写成功才返回幂等生产者防止重试导致重复消息importorg.apache.kafka.clients.producer.*;importjava.util.Properties;publicclassKafkaProducerAckDemo{publicstaticvoidmain(String[]args){Properties propsnewProperties();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,localhost:9092);// 关键配置props.put(ProducerConfig.ACKS_CONFIG,all);props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG,true);props.put(ProducerConfig.RETRIES_CONFIG,3);props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringSerializer);props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringSerializer);KafkaProducerString,StringproducernewKafkaProducer(props);ProducerRecordString,StringrecordnewProducerRecord(demo-topic,order-1,hello kafka);producer.send(record,(metadata,exception)-{if(exceptionnull){System.out.println(发送成功metadata.topic()-metadata.partition());}else{System.out.println(发送失败exception.getMessage());}});producer.close();}}5.kafka的消费者确认机制kafka没有显示ACK而是用offest表示“确认”1自动提交offsetenable.auto.committrue定时提交 offset业务还没处理完offset 已提交宕机 →消息丢失2手动提交 offset推荐enable.auto.commitfalseJava代码实现enable.auto.commitfalse业务成功后再提交 offset提供至少一次的语义importorg.apache.kafka.clients.consumer.*;importjava.time.Duration;importjava.util.Collections;importjava.util.Properties;publicclassKafkaConsumerManualCommitDemo{publicstaticvoidmain(String[]args){Properties propsnewProperties();props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,localhost:9092);props.put(ConsumerConfig.GROUP_ID_CONFIG,demo-group);// 关键配置props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,false);props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringDeserializer);props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringDeserializer);KafkaConsumerString,StringconsumernewKafkaConsumer(props);consumer.subscribe(Collections.singletonList(demo-topic));while(true){ConsumerRecordsString,Stringrecordsconsumer.poll(Duration.ofMillis(1000));for(ConsumerRecordString,Stringrecord:records){System.out.println(消费消息record.value());// 处理业务逻辑}// 业务成功后手动提交 offsetconsumer.commitSync();}}}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站管理员怎么登陆seo代码优化工具

💡实话实说:有自己的项目库存,不需要找别人拿货再加价,所以能给到超低价格。摘要 随着互联网技术的快速发展,在线订票系统已成为现代服务业的重要组成部分。传统的线下购票方式效率低下,用户体验较差&#…

张小明 2026/1/2 15:28:36 网站建设

网站优化工作内容.top和网站

第一章:检索结果重排序的 Dify 算法选择在构建高效、精准的检索增强生成(RAG)系统时,检索结果的排序质量直接影响最终的回答准确性。Dify 作为一款支持可视化编排的 AI 应用开发平台,提供了多种内置的重排序&#xff0…

张小明 2025/12/24 15:58:01 网站建设

目前个人网站做地最好是哪几家电商前期投资要多少钱

Kotaemon能否用于航班信息查询?实时数据融合挑战 在机场候机大厅里,乘客掏出手机问:“CA1833现在延误了吗?”——这看似简单的一句话,背后却是一场对智能系统响应速度与准确性的双重考验。传统聊天机器人可能只能回答“…

张小明 2025/12/28 0:54:54 网站建设

海珠高端网站建设成都建网站哪家好

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商产品3D展示系统,功能包括:1. 支持上传GLTF格式3D模型 2. 实现360度旋转查看 3. 多角度预设视角切换 4. 材质和颜色实时更换 5. 产品参数动态显示…

张小明 2026/1/1 9:01:51 网站建设

西安集团网站建设wordpress有识图插件

磁盘空间计算与文件权限管理指南 1. 计算可用磁盘空间 在操作系统中,了解系统的磁盘使用情况至关重要。可以使用 df 命令来计算系统的可用磁盘空间,不同的选项会产生不同的输出结果。 - 使用 df -h 命令 :该命令以更友好的方式显示磁盘使用信息,例如: $ df -h …

张小明 2026/1/1 11:20:49 网站建设

家具商务网站策划案响应式网站建设推广

使用Kotaemon构建农业技术咨询服务系统 在广袤的农田里,一位农民正盯着发黄的水稻叶片皱眉——这到底是缺肥、虫害还是气候影响?过去,他可能要等上几天才能联系到农技专家。如今,只需打开手机问一句:“水稻叶子发黄怎么…

张小明 2025/12/31 21:46:16 网站建设