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

北流网站制作安卓优化大师全部版本

北流网站制作,安卓优化大师全部版本,淘宝上的网站建设为什么便宜,小网站asp好还是php好本文章通过MQ队列来实现秒杀场景 整体的设计如下图#xff0c;整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理 1、首先先创建MQ的配置文件 Configuration public class RabbitConfig {public static final String DEAD_LETTER_EXCHANGE deadLetterE…本文章通过MQ队列来实现秒杀场景 整体的设计如下图整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理 1、首先先创建MQ的配置文件 Configuration public class RabbitConfig {public static final String DEAD_LETTER_EXCHANGE deadLetterExchange;public static final String DEAD_LETTER_QUEUEA_ROUTING_KEY dead.#;public static final String DEAD_LETTER_QUEUEA_NAME deadQueue;Autowiredprivate RabbitTemplate rabbitTemplate;Autowiredprivate ConnectionFactory connectionFactory;Beanpublic TopicExchange topicExchange(){return new TopicExchange(seckill_topic,true,false);}// 声明死信ExchangeBean(deadLetterExchange)public DirectExchange deadLetterExchange(){return new DirectExchange(DEAD_LETTER_EXCHANGE);}Bean(seckillQueue)public Queue seckillQueue(){MapString,Object args new HashMap();args.put(x-dead-letter-exchange, DEAD_LETTER_EXCHANGE);// x-dead-letter-routing-key 这里声明当前队列的死信路由keyargs.put(x-dead-letter-routing-key, DEAD_LETTER_QUEUEA_ROUTING_KEY);return QueueBuilder.durable(seckillQueue).withArguments(args).build();}Bean(deadQueue)public Queue binding(){return new Queue(DEAD_LETTER_QUEUEA_NAME);}Beanpublic Binding bindingExchange(){return BindingBuilder.bind(seckillQueue()).to(topicExchange()).with(seckill.#);}// 声明死信队列绑定关系Beanpublic Binding deadLetterBinding(Qualifier(deadQueue) Queue queue,Qualifier(deadLetterExchange) DirectExchange exchange){return BindingBuilder.bind(queue).to(exchange).with(DEAD_LETTER_QUEUEA_ROUTING_KEY);}//配置会覆盖yml的重试次数//RabbitMQ监听容器/*Beanpublic SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory){SimpleRabbitListenerContainerFactory factory new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);//设置并发factory.setConcurrentConsumers(1);SimpleMessageListenerContainer snew SimpleMessageListenerContainer();//最大并发factory.setMaxConcurrentConsumers(1);//消息接收——手动确认factory.setAcknowledgeMode(AcknowledgeMode.AUTO);//设置超时factory.setReceiveTimeout(2000L);//设置重试间隔factory.setFailedDeclarationRetryInterval(3000L);//监听自定义格式转换//factory.setMessageConverter(jsonMessageConverter);return factory;}*/ } 2、配置yml文件 spring:redis:database: 0host: xxxport: 6379password: xxxtimeout: 60jedis:pool:max-active: 8max-wait: -1max-idle: 8min-idle: 0rabbitmq:username: adminpassword: adminvirtual-host: /host: xxxxport: 12345publisher-confirms: truepublisher-returns: truetemplate:mandatory: truelistener:simple:concurrency: 1max-concurrency: 3# 消费者预取1条数据到内存默认为250条prefetch: 1# 确定机制acknowledge-mode: manualretry:enabled: true #是否支持重试max-attempts: 2# 重试间隔(ms)initial-interval: 5000 这里有一点需要注意的是在做死信队列的时候如果Config文件中配置了监听容器在yml文件中的一些属性要在容器里面进行配置当时测试重试的时候发现没有在Config文件中配置只在yml文件中配置了重试次数结果会无限期的重试MQ的默认方式就是无限期的重试所以这点很容易踩坑 3、实现交换机的ACK实现 RabbitTemplate.ConfirmCallback接口 Component public class ConfirmCallBackHandler implements RabbitTemplate.ConfirmCallback {Autowiredprivate RabbitMessageMapper rabbitMessageMapper;Autowiredprivate RabbitTemplate rabbitTemplate;//注入//PostConstruct注解会在Component、Autowired注解完成后再执行PostConstructpublic void init(){rabbitTemplate.setConfirmCallback(this);}Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {if(!ack){RabbitMessage rabbitMessage new RabbitMessage();rabbitMessage.setUniqueKey(correlationData.getId().toString());rabbitMessage.setSuccessFlag(N);rabbitMessageMapper.updateSuccessFlag(rabbitMessage);System.out.println(失败原因cause);}} } 4、实现队列的ACK实现 RabbitTemplate.ReturnCallback Component public class ReturnCallBackHandler implements RabbitTemplate.ReturnCallback {Autowiredprivate RabbitTemplate rabbitTemplate;//注入//PostConstruct注解会在Component、Autowired注解完成后再执行PostConstructpublic void init(){rabbitTemplate.setReturnCallback(this);}Overridepublic void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {System.out.println(消息主体 messagemessage);System.out.println(应答码 replyCode: replyCode);System.out.println(原因描述 replyTextreplyText);System.out.println(交换机 exchangeexchange);System.out.println(消息使用的路由键 routingKeyroutingKey);} } 5、消费者方面实现 ChannelAwareMessageListener 接口 Component public class AckListener implements ChannelAwareMessageListener {Autowiredprivate RabbitMqService rabbitMqService;RabbitListener(queues seckillQueue)Overridepublic void onMessage(Message messagex, Channel channel) throws Exception {try {String result new String(messagex.getBody(),utf-8);rabbitMqService.receive(result);channel.basicAck(messagex.getMessageProperties().getDeliveryTag(), false);}catch (Exception exception){channel.basicNack(messagex.getMessageProperties().getDeliveryTag(), false, false);}} }
http://www.sadfv.cn/news/175824/

相关文章:

  • 网站建设判断题自己创造网站平台
  • 达州网站开发广东狮山网站建设
  • 南京企业网站开发公司南庄建网站
  • 如何做营销型手机网站优化如何做网站本地服务器吗
  • 成都建设路小学网站青岛网页设计师
  • 网站服务器和网站备案网页设计与制作知到智慧树答案
  • 网站开发毕业设计文献综述十大必做调查网站
  • 临沂哪里做网站比较好网站开发所遵循
  • 北京网站建设价格天wordpress是瀑布流吗
  • 网站建设提成企业网站建设_秒搜
  • 昆明专门做网站网站首页设计制作费用
  • 网站建设 模板中心iis网站目录权限设置
  • 建设网站哪家好咨询公司有哪些
  • 专业做商铺的网站中国排建设银行悦生活网站
  • 学院门户网站建设必要性西安网站制作有限公司
  • 网站的描述 都应该写 什么 优化百度竞价做网站
  • 重庆市园林建设有限公司网站不收费的网站
  • 合肥网站建设网站制作精准引流推广平台
  • 兰州网站建设兰州vs2008不能新建网站
  • 个人做网站建筑模版东莞网站建设技术支持
  • 百度抓取网站登录怎么在自己电脑上建设网站
  • 怎么做frontpage网站上海装修设计公司排名
  • 简单的企业网站cms在网上帮做图片的网站
  • 黑龙江专业建站虚拟主机网站建设
  • 建设电影播放网站社群营销案例
  • 做网站的相关术语广告公司广告语简洁
  • led设计网站建设wordpress列表分页
  • 丽水做企业网站的地方大连云app官方下载
  • 企业策划 企业网站建设 品牌设计自定义字段wordpress
  • 蚌埠网站建设专业公司上高做网站公司