killme2008/Metamorphosis

不停的创建新线程直至资源耗尽

Closed this issue · 5 comments

        messageConsumer.subscribe(topic_order_status_change, 1024, new MessageListener() {
            @Override
            public void recieveMessages(Message message) throws InterruptedException {
                doDispatch(message);
            }

            @Override
            public Executor getExecutor() {
                return Executors.newCachedThreadPool();
            }
        });
        messageConsumer.completeSubscribe();

messageConsumer是单例的,getExecutor方法会不停被调用不产生线程直到整个程序不能创建新线程,如果getExecutor return null的话不存在该问题。

请作为实例变量,而不是局部变量使用。

    @Autowired
    private MessageConsumer messageConsumer;

spring注入的

executor = Executors.newCachedThreadPool();
messageConsumer.subscribe(topic_order_status_change, 1024, new MessageListener() {
            @Override
            public void recieveMessages(Message message) throws InterruptedException {
                doDispatch(message);
            }

            @Override
            public Executor getExecutor() {
                return executor;
            }
        });

或者作为 listener 的实例变量

懂了,谢谢! 可是不明白的是为什么getExecutor会被多次调用呢,按我的理解这个executor是服务于这次订阅或者这个主题的应该在订阅的时候调用一次就够了。

每次执行任务都会调用一次,内部为了避免状态管理,不会做缓存。

在 2015年3月3日 下午6:31,Wang,Tao notifications@github.com写道:

懂了,谢谢!
可是不明白的是为什么getExecutor会被多次调用呢,按我的理解这个executor是服务于这次订阅或者这个主题的应该在订阅的时候调用一次就够了。


Reply to this email directly or view it on GitHub
#114 (comment)
.

庄晓丹
Email: killme2008@gmail.com xzhuang@avos.com
Site: http://fnil.net
Twitter: @killme2008