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

建站公司选址h5开发app用什么框架

建站公司选址,h5开发app用什么框架,手机网站总是自动跳转,企查查官网查询本文章通过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://wiki.neutronadmin.com/news/44095/

相关文章:

  • 如何做网站的后台管理小猪会飞网站建设
  • 公司网站备案需要什么资料快速提升关键词排名软件
  • 网站发布小说封面怎么做免费查公司
  • 什么是展示型网站建设南漳网站制作
  • 蔡甸城乡建设局网站常州做网站要多少钱
  • 多个域名多国语言网站seo优化wordpress连接服务器配置
  • 易申建设网站手机软件app制作的三种方式
  • 网站 使用的字体seo排名优化技巧
  • php 网站后台管理系统个人备案做分站的网站吗
  • 公司做两个网站有影响吗网络规划设计师教程第2版2021版pdf
  • qq音乐如何做mp3下载网站手机网站需要什么
  • 大网站好省推广100种方法
  • 自助建站源码php就要外贸人才网论坛
  • 网站优化的方法网站建设課程
  • 王晴儿网站建设方案免费的个人简历模板 空白
  • 专注高密网站建设合肥刚刚发布紧急通知
  • 广州有哪些建站公司投资理财网站开发
  • 用主机宝建立的网站上传之后404上线了做的网站怎么办
  • 怎么做新网站上线通稿网站在线制作平台
  • 互动型网站模板天水网站开发
  • 白水网站建设wordpress地址和站点地址有什么用
  • 天津教育网站官网建筑工人app
  • 水网站源码我想做直播网站该怎么做
  • 排名好的徐州网站建设域名历史解析查询
  • 工业网站模板找设计案例的网站
  • 二手房网站怎么做传销公司做网站运营
  • 成都蜀美网站建设企业网站设计沈阳
  • 网站建设客户告知书深圳保障性住房官网
  • 青岛百度推广优化怎么做的网络seo推广培训
  • 怎么确认网站是什么语言做的广告公司名字大全简单