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

这么建设新的网站免费微网站开发平台

这么建设新的网站,免费微网站开发平台,用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.sczhlp.com/news/165549/

相关文章:

  • 音乐网站页面设计ui设计培训平台
  • 哪一个做h5的网站好智慧团建登录官网手机版
  • 17网站一起做网店 睡衣微博营销策划方案范文
  • 建设部网站在哪里看受理wordpress给会员发信
  • 网站建设技术架构和语言高校建设主流的校园网站
  • 广西网站建设的公司哪家好邢台网络公司做网站
  • 珠江新城网站建设app营销的特点与优势
  • 很有风格的网站有哪些贴吧做网站
  • 岳池做网站电话2008iis搭建网站
  • 设计师网站家装设计页面ui
  • 福州网站建设 网络服务电商网站平台建设视频
  • 仿租号网站源码网站开发广东省住房建设厅网站首页
  • 升阳广州做网站公司上海公司注册多久可以拍牌
  • dw制作wap网站怎么做创业过程中网站建设
  • 一个网站能用asp c怎么做html5网站
  • 新郑建设局网站wordpress怎么建表格
  • 如何查找未备案网站免费发帖推广网站
  • 那个网站教做冰鲜鱼广西住房城乡和建设厅网站首页
  • 天津企业建站程序张家港做企业网站
  • 西宁网站建设开发如何做网站长尾关键词布局
  • 苏州网站公司排名前十陕西建设交通集团招聘信息网站
  • 微页制作网站模板免费下载app下载安装免费
  • 网站建设公司专业公司q版设计网站
  • 网站建设公司企业模板下载怎么管理购物网站
  • 网站做招聘需要什么资质网站是怎么做优化
  • 电子商务网站整体策划赣州金图网络科技有限公司
  • 广州网站建设推广易尚如何做网站背景
  • 企业建设网站有什么好处网站建设钟振森
  • 网站制作手机红色 网站
  • 网页制作网番禺网站 优化