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

济南企业网站建设哪家好计算机网络技术主要是干什么的

济南企业网站建设哪家好,计算机网络技术主要是干什么的,网络推广方案包括哪些内容,wordpress个人中心打不开生产者没有成功把消息发送到MQ 丢失的原因 :因为网络传输的不稳定性,当生产者在向MQ发送消息的过程中,MQ没有成功接收到消息,但是生产者却以为MQ成功接收到了消息,不会再次重复发送该消息,从而导致消息的丢…

生产者没有成功把消息发送到MQ
丢失的原因 :因为网络传输的不稳定性,当生产者在向MQ发送消息的过程中,MQ没有成功接收到消息,但是生产者却以为MQ成功接收到了消息,不会再次重复发送该消息,从而导致消息的丢失。

解决办法 : 有两个解决办法:事务机制和confirm机制,最常用的是confirm机制(发布确认机制)。

注意:

          RabbitMQ的事务机制是同步的,很耗型能,会降低RabbitMQ的吞吐量。

          confirm机制是异步的,生成者发送完一个消息之后,不需要等待RabbitMQ的回调,就可以发送下一个消息,当RabbitMQ成功接收到消息之后会自动异步的回调生产者的一个接口返回成功与否的消息。

两个机制说明如下:

confirm(发布确认)机制
解释:RabbitMQ可以开启 confirm 模式,在生产者那里设置开启 confirm 模式之后,生产者每次写的消息都会分配一个唯一的 id,如果消息成功写入 RabbitMQ 中,RabbitMQ 会给生产者回传一个 ack 消息,告诉你说这个消息 ok 了。如果 RabbitMQ 没能处理这个消息,会回调你的一个 nack 接口,告诉你这个消息接收失败,生产者可以重新发送。而且你可以结合这个机制自己在内存里维护每个消息 id 的状态,如果超过一定时间还没接收到这个消息的回调,那么可以重发。

代码

yml配置

----------------------------------------------------------------------------------------------------

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
/**
* 交换机回滚
*/
@Component
@Slf4j
public class ExchangeCallback implements RabbitTemplate.ConfirmCallback{/* correlationData 内含消息内容* ack 交换机接受成功或者失败。 true表示交换机接受消息成功, false表示交换机接受失败* cause 表示失败原因*/@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {System.out.println("hello world");String id = correlationData.getId();String message = new String(correlationData.getReturnedMessage().getBody());if (ack){log.info("交换机收到消息id为{}, 消息内容为{}", id, message);}else {log.info("交换机未收到消息id为{}, 消息内容为{}, 原因为{}", id, message, cause);}}
}

----------------------------------------队列防止消息丢失----------------------------------------------------------------

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;/*** 队列防止消息丢失*/
@Slf4j
@Component
public class QueueCallback implements RabbitTemplate.ReturnCallback{@Overridepublic void returnedMessage(Message message,int replyCode, String replyText, String exchange, String routingKey) {log.info("消息 {} 经交换机 {} 通过routingKey={} 路由到队列失败,失败code为:{}, 失败原因为:{}",new String(message.getBody()), exchange, routingKey, replyCode, replyText);}
}

--------------------------引用->controller-----------------------------------------------

//交换机回滚
@Autowired
private ExchangeCallback exchangeCallback;
//队列回滚
@Autowired
private QueueCallback queueCallback;
/*** 初始化交换机监听*/
@PostConstruct
public void init(){  
//交换机
rabbitTemplate.setConfirmCallback(exchangeCallback);
/*** true:交换机无法将消息进行路由时,会将该消息返回给生产者* false:如果发现消息无法进行路由,则直接丢弃*/
rabbitTemplate.setMandatory(true);
//队列
rabbitTemplate.setReturnCallback(queueCallback);
}
/*** 发送消息* 结果:"这是一条消息"*/@GetMapping("/sendMessageTest")public String sendMessageTest(){// 消息类型为object 发送对象也是可以的String msg = "这是一条消息";// 第一个参数为发送消息到那个交换机上,第二个是发送的路由键(交换机进行需要符合绑定的队列),第三个参数为发送的消息
//CommonUtils.dirExchange--自己的交换机名称
//CommonUtils.routingKey --路由Key值 rabbitTemplate.convertAndSend("1235",CommonUtils.routingKey,msg);System.out.println("消息发送成功:"+msg);return "发送成功;发送内容为:"+msg;}

运行结果:

http://www.yayakq.cn/news/792360/

相关文章:

  • 江苏专业网站制作目前旅游网站开发
  • jsp网站建设模板下载万网云服务器怎么上传网站
  • 网站备案的意义分销是什么意思
  • 用dw做的网站怎样弄上网上wordpress是什么意思
  • 中国建设银行快捷付授权网站主题资源网站建设步骤
  • 网站做京东联盟宁波网站建设官
  • 教育培训网站wordpress小米
  • 企业网站设计建设wordpress qq音乐插件
  • 东营做网站tt0546二级子域名查询入口
  • 品牌商标购买网站免费分销方案如何打造更强的分销团队
  • 免费网站模板怎么用百度竞价推广思路
  • 企业网站策划案怎么写怎么进行网站推广
  • 珠宝网站源码施工许可证查询官网
  • 一台电脑主机做网站模板公司
  • 班级网站界面企业查查官网入口
  • 哪些公司需要网站开发工程师宠物网站建设策划书
  • 济南智能网站建设报价室内设计怎么样
  • 做网站最大可以做多少g微信开发者平台在哪里打开
  • 网站地址验证失败权威的深圳动画营销推广
  • 怎样做有效的黄页网站响应式网站解决方案
  • 郑州付费系统网站开发建设营业推广策划
  • 速贝cms建站系统网页设计html代码大全居中
  • 网站代理浏览器一网站开发从哪里学起
  • 中国建设银行网站密码是什么怎么做网站二维码
  • 没有做网站能备案吗让别人做一个网站需要多少钱
  • 温州微网站开发当前网站开发的语言
  • 旅游网站建设报价单网站开发亿玛酷出名5
  • 建立网站预算长春网站建设案例
  • 网站安全建设模板下载安装设计制作海报教案
  • 查网站备案名称个人网站设计背景图