精华内容
下载资源
问答
  • 事实上,有时候某些测试需要依赖于组件,不可能 100% 的可靠,Flaky 不会删除这些测试,或者标记 @skip ,而是会自动的重试测试。 想任何的 nose 插件一样,Flaky 可以通过命令行执行: nosetests --with-flaky 把...
  • Dubbo重试次数

    2019-02-10 12:40:00
     *我们应该在幂等方法上设置重试次数【查询、删除、修改】,在非幂等方法上禁止设置重试次数。  ★幂等:指多次运行方法所产生的最终效果是一致的   1 <!--3、声明需要调用的远程服务接口,生成远程服务...

      服务超时后重试次数【retries】,不包含第一次调用,0代表不重试

      *我们应该在幂等方法上设置重试次数【查询、删除、修改】,在非幂等方法上禁止设置重试次数。

      ★幂等:指多次运行方法所产生的最终效果是一致的

      

    1     <!--3、声明需要调用的远程服务接口,生成远程服务代理,可以和本地Bean一样使用-->
    2     <dubbo:reference id="userService" interface="cn.coreqi.service.UserService" timeout="5000">
    3         <dubbo:method name="getById" timeout="1000" retries="3"/>
    4     </dubbo:reference>
    5 
    6     <!--4、配置服务消费者的统一规则-->
    7     <dubbo:consumer timeout="5000"/>

     

    转载于:https://www.cnblogs.com/fanqisoft/p/10359075.html

    展开全文
  • 手动删除oracle数据库DBF文件时,将无法正常启动数据库, 可以尝试将删除的DBF数据文件进行离线后重试: 1.alter database open 命令可以提示数据文件序号 2.alter database datafile 10 offline drop 命令可以根据...

    手动删除oracle数据库DBF文件时,将无法正常启动数据库, 可以尝试将删除的DBF数据文件进行离线后重试:

    1.alter database open 命令可以提示数据文件序号

    2.alter database datafile 10 offline drop 命令可以根据文件序号将文件离线.

    展开全文
  • 网速很慢,能上qq,不能看视频,...6.实在不行就“还原系统”或“装系统”! 7.用360卫士修复一下主页:360卫士打开后--高级--修复IE 8.打开360浏览器,“工具”,“360安全浏览器选项”,改下主页

    网速很慢,能上qq,不能看视频,网速很慢,一下载软件,网速就为0k/s。

    一种被蓄意打包和正常软件捆绑安装的广告木马,病毒会释放正常的flash插件相关文件,同时将病毒文件XFlash1000.ocx和Flash10e.ocx也一并释放到系统中.
    另一种是非病毒原因即网络原因也可能导致qq农场打不开
    【解决方案】我给你8种方法调试,快试试吧:
    1.电脑里有木马或病毒干扰,下载“360安全卫士”和“360杀毒2.0版”,建议“全盘扫描”病毒和木马,修补电脑上的漏洞!
    2.你下载的“播放器”,或“聊天软件”,或“IE浏览器”的程序不稳定,或者“版本太旧”!建议卸掉,下载新的,或将其升级为“最新版本”。
    3.就是你安装了两款或两款以上的同类软件(如:两款播放器,两款QQ,或多款浏览器,多款杀毒软件等等)!它们在一起不“兼容”,卸掉“多余”的那一款!
    4.你在电脑左下角“开始”菜单里找到“强力卸载电脑上的软件”,找到多余的那款卸掉! 卸完了再“强力清扫”(看准了再卸,别把有用的卸了)。
    5.下载个“360顽固木马专杀”或“360急救箱”,急救系统!
    6.实在不行就“还原系统”或“重装系统”!
    7.用360卫士修复一下主页:360卫士打开后--高级--修复IE
    8.打开360浏览器,“工具”,“360安全浏览器选项”,改下主页


    展开全文
  • 如果消费者处理消息失败后不重试,然后发送应答给rabbitmq,rabbitmq就会将队列中的消息删除,从而造成消息的丢失。所以我们要在消费者处理消息失败的时候,重试一定的次数。比如重试3次,如果重试3次之后还是失败...

    1、为什么要重试?

           如果消费者处理消息失败后不重试,然后发送应答给rabbitmq,rabbitmq就会将队列中的消息删除,从而造成消息的丢失。所以我们要在消费者处理消息失败的时候,重试一定的次数。比如重试3次,如果重试3次之后还是失败,则把这条消息发送到死信队列。

           所以我们现在要实现消息的重试,实现效果为:

           首先,将消息携带routtingkey的消息发送到正常转发器exchange@normal,exchange@normal将消息发送到正常队列queue@normal,queue@normal得到消息后进行处理,如果处理成功,则给rabbitmq发送应答。如果消息处理失败,判断消息失败的次数:如果失败次数小于3次,则将消息发送到重试转发器exchange@retry,exchange@retry得到消息后,发送到重试队列queue@retry,queue@retry10s后,将该条消息再次发送到正常转发器exchange@normal进行正常的消费;如果失败次数超过3次,则将消息发送到失败转发器exchange@filed,exchange@filed将失败了的消息发送给失败队列queue@filed,然后可以根据业务需求处理失败了的数据。比如保存到失败文件或者数据库等,也可以人工处理后,重新发送给exchange@normal。

          思路图如下:

               

                     

    2、重试实现的思路

          生产者端发送消息:

          1)、声明三个转发器

     //正常的转发器
     private static String NORMAL_EXCHANGE = "exchange@normal";
     //重试转发器
     private static String RETRY_EXCHANGE = "exchange@retry";
     //失败转发器
     private static String FILED_EXCHANGE = "exchange@filed";
    
                          ......
    
     //声明正常的转发器
     channel.exchangeDeclare(NORMAL_EXCHANGE,"topic");
     //声明重试的转发器
     channel.exchangeDeclare(RETRY_EXCHANGE,"topic");
     //声明失败的转发器
     channel.exchangeDeclare(FILED_EXCHANGE,"topic");

         2)、发送消息到正常的队列

    //发送5条消息到正常的转发器,路由密匙为normal
    for(int i=0;i<5;i++){
          String message = "retry..."+i;
          channel.basicPublish(NORMAL_EXCHANGE,"normal",             
          MessageProperties.PERSISTENT_BASIC,message.getBytes());
    }

          消费者端接受、处理消息:

          1)、定义并声明转发器和队列,需要注意的是queue@normal和queue@filed两个队列就是普通的队列。queue@retry队列需要设置两个参数:x-dead-letter-exchange、x-message-ttl。这两个参数按照我自己的理解是x-dead-letter-exchange指定重试时将消息重发给哪一个转发器、x-message-ttl消息到达重试队列后,多长时间后重发。

        //转发器
        private static String NORMAL_EXCHANGE = "exchange@normal";
        private static String RETRY_EXCHANGE = "exchange@retry";
        private static String FILED_EXCHANGE = "exchange@filed";
        //队列
        private static String NORMAL_QUEUE = "queue@normal";
        private static String RETRY_QUEUE = "queue@retry";
        private static String FILED_QUEUE = "queue@filed";
    
                             ......
        
        //声明正常队列
        channel.queueDeclare(NORMAL_QUEUE,true,false,false,null);
    
        //声明重试队列,重试队列比较特殊,需要设置两个参数
        Map<String,Object> arg = new HashMap<String,Object>();
        //参数1:将消息发送到哪一个转发器
        arg.put("x-dead-letter-exchange",NORMAL_EXCHANGE);
        //参数2:多长时间后重发
        arg.put("x-message-ttl",10000);
        channel.queueDeclare(RETRY_QUEUE,true,false,false,arg);
    
        //声明失败队列
        channel.queueDeclare(FILED_QUEUE,true,false,false,null);

         2)、将队列绑定转发器和路由密匙

    //将队列绑定转发器和路由密匙
    channel.queueBind(NORMAL_QUEUE,NORMAL_EXCHANGE,"normal");
    channel.queueBind(RETRY_QUEUE,RETRY_EXCHANGE,"normal");
    channel.queueBind(FILED_QUEUE,FILED_EXCHANGE,"normal");

         3)、定义consumer,消费消息。因为消息设置的是自动应答,所以不需要手动应答。如果你设置了手动应答,则在消息消费成功或者失败后都要应答。

    Consumer consumer = new DefaultConsumer(channel){
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                        //此处处理消息
                        try{
                            String message = new String(body,"utf-8");
                            System.out.println("消费者接受到的消息:"+message);
                            //模拟处理消息产生异常
                            int i = 1/0;
                        }catch(Exception e){
                            try{
                                //延迟5s
                                Thread.sleep(5000);
                                //判断失败次数
                                long retryCount = getRetryCount(properties);
                                if(retryCount>=3){
                                    //如果失败超过三次,则发送到失败队列
                                    channel.basicPublish(FILED_EXCHANGE,envelope.getRoutingKey(),MessageProperties.PERSISTENT_BASIC,body);
                                    System.out.println("消息失败了...");
                                }else{
                                    //发送到重试队列,10s后重试
                                    channel.basicPublish(RETRY_EXCHANGE,envelope.getRoutingKey(),properties,body);
                                    System.out.println("消息重试中...");
                                }
                            }catch (Exception e1){
                                e.printStackTrace();
                            }
    
                        }
                    }
                };
    //消费消息
    channel.basicConsume(NORMAL_QUEUE,true,consumer);

         判断消息失败次数的方法如下:

    public long getRetryCount(AMQP.BasicProperties properties){
            long retryCount = 0L;
            Map<String,Object> header = properties.getHeaders();
            if(header != null && header.containsKey("x-death")){
                List<Map<String,Object>> deaths = (List<Map<String,Object>>)header.get("x-death");
                if(deaths.size()>0){
                    Map<String,Object> death = deaths.get(0);
                    retryCount = (Long)death.get("count");
                }
            }
            return retryCount;
    }

    重试的完整代码如下:

         1)、生产者

    @Component
    public class RetryPublisher {
    
        private static String NORMAL_EXCHANGE = "exchange@normal";
        private static String RETRY_EXCHANGE = "exchange@retry";
        private static String FILED_EXCHANGE = "exchange@filed";
        public void send(){
            Connection connection = ConnectionUtil.getInstance();
            Channel channel = null;
            try{
                channel = connection.createChannel();
                //声明正常的转发器
                channel.exchangeDeclare(NORMAL_EXCHANGE,"topic");
                //声明重试的转发器
                channel.exchangeDeclare(RETRY_EXCHANGE,"topic");
                //声明失败的转发器
                channel.exchangeDeclare(FILED_EXCHANGE,"topic");
    
                //发送5条消息到正常的转发器,路由密匙为normal
                for(int i=0;i<5;i++){
                    String message = "retry..."+i;
                    channel.basicPublish(NORMAL_EXCHANGE,"normal", MessageProperties.PERSISTENT_BASIC,message.getBytes());
                }
            }catch (Exception e){
    
            }
        }
    }

         2)、消费者方法和判断消息失败次数的方法

    @Component
    public class RetryReceiver {
    
        //转发器
        private static String NORMAL_EXCHANGE = "exchange@normal";
        private static String RETRY_EXCHANGE = "exchange@retry";
        private static String FILED_EXCHANGE = "exchange@filed";
        //队列
        private static String NORMAL_QUEUE = "queue@normal";
        private static String RETRY_QUEUE = "queue@retry";
        private static String FILED_QUEUE = "queue@filed";
    
    
        public void receiver(){
    
            Connection connection = ConnectionUtil.getInstance();
            final Channel channel;
            try{
                channel = connection.createChannel();
                //声明正常队列
                channel.queueDeclare(NORMAL_QUEUE,true,false,false,null);
    
                //声明重试队列,重试队列比较特殊,需要设置两个参数
                Map<String,Object> arg = new HashMap<String,Object>();
                //参数1:将消息发送到哪一个转发器
                arg.put("x-dead-letter-exchange",NORMAL_EXCHANGE);
                //参数2:多长时间后发送
                arg.put("x-message-ttl",10000);
                channel.queueDeclare(RETRY_QUEUE,true,false,false,arg);
    
                //声明失败队列
                channel.queueDeclare(FILED_QUEUE,true,false,false,null);
    
    
                //将队列绑定转发器和路由密匙
                channel.queueBind(NORMAL_QUEUE,NORMAL_EXCHANGE,"normal");
                channel.queueBind(RETRY_QUEUE,RETRY_EXCHANGE,"normal");
                channel.queueBind(FILED_QUEUE,FILED_EXCHANGE,"normal");
    
                Consumer consumer = new DefaultConsumer(channel){
                    @Override
                    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                        //此处处理消息
                        try{
                            String message = new String(body,"utf-8");
                            System.out.println("消费者接受到的消息:"+message);
                            //模拟处理消息是产生异常
                            int i = 1/0;
                        }catch(Exception e){
                            try{
                                //延迟5s
                                Thread.sleep(5000);
                                //判断失败次数
                                long retryCount = getRetryCount(properties);
                                if(retryCount>=3){
                                    //如果失败超过三次,则发送到失败队列
                                    channel.basicPublish(FILED_EXCHANGE,envelope.getRoutingKey(),MessageProperties.PERSISTENT_BASIC,body);
                                    System.out.println("消息失败了...");
                                }else{
                                    //发送到重试队列,10s后重试
                                    channel.basicPublish(RETRY_EXCHANGE,envelope.getRoutingKey(),properties,body);
                                    System.out.println("消息重试中...");
                                }
                            }catch (Exception e1){
                                e.printStackTrace();
                            }
    
                        }
                    }
                };
                //消费消息
                channel.basicConsume(NORMAL_QUEUE,true,consumer);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        /**
         * 获取消息失败次数
         * @param properties
         * @return
         */
        public long getRetryCount(AMQP.BasicProperties properties){
            long retryCount = 0L;
            Map<String,Object> header = properties.getHeaders();
            if(header != null && header.containsKey("x-death")){
                List<Map<String,Object>> deaths = (List<Map<String,Object>>)header.get("x-death");
                if(deaths.size()>0){
                    Map<String,Object> death = deaths.get(0);
                    retryCount = (Long)death.get("count");
                }
            }
            return retryCount;
        }
    }
    

         3)、测试Controlelr

    @Controller
    public class RetryController {
        @Autowired
        private RetryPublisher publisher;
        @Autowired
        private RetryReceiver receiver;
    
        @RequestMapping("/retrySend")
        @ResponseBody
        public void send(){
            publisher.send();
        }
    
        @RequestMapping("/retryReceive")
        @ResponseBody
        public void receive(){
            receiver.receiver();
        }
    
    }

    本文的思路图来自博主:https://www.cnblogs.com/itrena/p/9044097.html

    展开全文
  • 重试次数 原因:当我们某一个服务,由于各种原因,比如:网络不佳,服务运行缓慢等,导致超时,远程方法调用失败,我们可以通过调整重试次数,让它多试上几次。 重试次数是一个整数,不包含第一次调用,0 代表不...
  • 预览小程序时,提示 “Error: 代码包大小为 2491 kb,上限为 2048 kb请删除文件后重试” 看了一下官方说明如下: 目前小程序分包大小有以下限制: 解决方案: 对小程序进行分包,可以优化小程序首次启动的...
  • 原因 小程序大小限制是2m,整个小程序文件过大,最快...删除硬盘里面的图片  然后开始替换 原本应该是 &lt;image src="/images/logo.jpg" &gt;&lt;/image &gt; 替换成 &lt...
  • 解决删除文件时出现“该项目不在XX中,请确认该项目的位置然后重试”的提示 教你一个无敌删除的命令,所有的流氓软件及顽固程序等都可以轻松的删除 1、桌面右键-新建-文本文档-(双击桌面的这个新建的文本文档,把...
  • 要在单个测试/套件上启用重试,请删除Cypress.currentTest使用, Cypress.currentTest采用测试配置替代,例如: // on a single test it ( 'test title' , { retries : 2 } , ( ) => { ... } ) // or on a suite ...
  • /* * 循环删除目录 * return:true 或 string错误, 请使用绝对真来判断是否成功 */ function rmdir($path) { $path = trim($path); $path = str_replace("\\", '/', $path); if (!file_exists($path))
  • 请确认该项目的位置,然后重试。】,重启、强力删除类软件都无法删除,没办法了,只能上大招了。 大招: 1、新建【大招.txt】文件 2、输入以下内容后,保存 DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 3、将文件名改为...
  • 说的文件夹中的文件已经在另外一个程序中打开,请关闭该文件夹,重试。其实这样我们也不知道到底哪里出现问题了,那个文件或文件夹被什么程序占用,此时都不知道。下面给出解决方法。 2、解决方法 (1)打开任务...
  • MySQL重装,删除重

    2018-04-27 16:37:16
    卸载之后完全重新安装不了,期间电脑重置过几次,本次装版本为5.7.21,装成功,其他版本未经测试,步骤如下:1、首先参照网上的方法自行把所有的与mysql有关的注册表之类的东西全部删除掉...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...使用thinkPhp,修改线上数据库的配置,请删除 Runtime 中的所有内容后重试 转载于:https://my.oschina.net/machell/blog/200542
  • 在wp7开发中,由于的关闭解决方案不当或者是移动解决方案的存储位置的原因,可能会导致运行出错。...请删除已损坏的保存状态文件,然后重试。 解决办法:到C:\ProgramData\Microsoft\XDE目录下删
  • 二、使用下载工具创建的文件夹,在未下载完成前自行删除文件 三、系统备份文件GHOST创建的文件(我是系统备份的ghost产生的,装双系统时) 四、恶意文件生成的防删除目录 2 1.打开我的电脑,或者任意文件夹,在显示已知...
  • 微信小程序预览不能超过2M,如何解决呢?采用分包加载即可轻松解决,整个项目最多可以不大于12M均可在本地预览。
  • 您可以缩短文件名并重试,或者尝试路径较短的位置。的解决办法。 package com.iteye.injavawetrust.ad;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputS...
  • 将草稿箱存的一些文章发布或者删除即可。
  • 先了解Redis 有序集合(sorted set) Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。...集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 23...
  • 二、消费端消息重试机制 一、消费端消息确认机制 在SpringBoot中,消费端可以配置消息确认模式。共有3种。 #acknowledge-mode.NONE:发送到消费端后就自动确认,消息被删除 #acknowledge-mode.MANUAL:手动确认,...
  • 解决:从官网自定义构建以减小文件大小。 http://echarts.baidu.com/builder.html
  • AntDB 分布性能测试记录二 接上篇《AntDB分布(rebalance)性能对比记录一》,AntDB在分布方面有优化的空间,本文通过记录一组数据,验证优化方案的可能性。...删除不属于自己的数据,这部分...
  • 新建一个批处理文件,编辑以下内容并保存,然后把想要删除的空文件夹拖到该批处理文件中,删除成功!DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 转载于:https://blog.51cto.com/sndapk/922498...
  • 它们一般的流程都是:每隔一段时间,去数据库获取有效的任务,然后执行,执行完成之后,删除任务或者将任务设置为失效。 那么这就可能存在一个潜在的风险:“雪崩效应”。 试想一下如下场景:我有个定时任务,每隔...
  • jenkins登录信息无效,请重试

    千次阅读 2018-06-12 10:09:17
    方案1:ps -ef | grep -v grep |grep jenkins 查看是否开启了多个jenkins(windows... 编者遇到此问题,按照网上说的,把用户验证环节都删除了,依旧登录不了,花了大半天时间都没有解决。  最后突然灵机一现,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,621
精华内容 648
关键字:

删除重试