[ 
https://issues.apache.org/jira/browse/ROCKETMQ-102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15882166#comment-15882166
 ] 

ASF GitHub Bot commented on ROCKETMQ-102:
-----------------------------------------

Github user zhouxinyu commented on a diff in the pull request:

    https://github.com/apache/incubator-rocketmq/pull/64#discussion_r102893550
  
    --- Diff: 
client/src/main/java/org/apache/rocketmq/client/impl/consumer/ConsumeMessageOrderlyService.java
 ---
    @@ -92,10 +92,22 @@ public void run() {
             }
         }
     
    -    public void shutdown() {
    +    @Override
    +    public void shutdown(long awaitTerminateMillis) {
             this.stopped = true;
             this.scheduledExecutorService.shutdown();
             this.consumeExecutor.shutdown();
    +        //await to consume
    +        if (awaitTerminateMillis > 0) {
    +            try {
    +                
this.consumeExecutor.awaitTermination(awaitTerminateMillis,TimeUnit.MILLISECONDS);
    +                if (!this.consumeExecutor.isTerminated()) log.info("There 
are messages still being consumed in thread pool, but not going to await them 
anymore. Have awaited for {} ms",awaitTerminateMillis);
    --- End diff --
    
    May be we need a common method to shutdown executor gracefully, like:
    
    ```
    public static void shutdownGracefully(ExecutorService executor, long 
timeout, TimeUnit timeUnit) {
            executor.shutdown();
    
            try {
                if(!executor.awaitTermination(timeout, timeUnit)) {
                    executor.shutdownNow();
                    if(!executor.awaitTermination(timeout, timeUnit)) {
                        LOG.warn(String.format("%s didn\'t terminate!", new 
Object[]{executor}));
                    }
                }
            } catch (InterruptedException var5) {
                executor.shutdownNow();
                Thread.currentThread().interrupt();
            }
    
        }
    ```


> When shutdown(), the persisted offet is not the latest consumed message, 
> which may cause repeated messages
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: ROCKETMQ-102
>                 URL: https://issues.apache.org/jira/browse/ROCKETMQ-102
>             Project: Apache RocketMQ
>          Issue Type: Improvement
>          Components: rocketmq-client
>            Reporter: Jaskey Lam
>            Assignee: Xiaorui Wang
>
> When shutdown push consumer, push consumer will shutdwon thread pool then 
> persist offset.
> While shutdown thread pool is only stop submiting message to consume, which 
> does not stop consuming message which exists in the the thread queue or is 
> already being consumed.
> Which will cause repeated message very easily though user are shutdown 
> gracefully according to the provided interface.
> A way to solve this problem is needed. Such as accpet a param that how long 
> to wait for thread pool to terminated.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to