【问题标题】:Can multiple listeners work on same code?多个侦听器可以处理相同的代码吗?
【发布时间】:2017-09-27 01:39:21
【问题描述】:

我计划有一个代理主题,并有多个默认消息侦听器或简单的消息侦听器。所有的侦听器都执行相同的代码。

  1. 每个侦听器代码执行是否相互独立。我想问的是,当访问相同的方法时,听众之间是否会发生冲突?

我有点像他们工作的多线程执行。 我使用 JMS 和 activemq 作为代理。

需要理解的一些代码: 每个侦听器都会调用此方法“事件处理”发送事件。该方法将依次调用其他方法。处理方法将依次调用其他方法。

private void eventProcessing(final Event Event){
        try {
                if(Event.isDatafileTransaction()){
                final EventDatafileTransaction datafileTransaction = Event.getDatafileTransaction();

                            final List<Events> transactions = getDatafileTransactions(datafileTransaction);
                            final List<AcEventRecordOperation> recordOperations = getTransactionsAsListOfRecordOperations(datafileTransaction, transactions);

                            if (recordOperations != null  && recordOperations.size() > 0) {

                                    recordOperationListener.handle(recordOperations);

                        }

                }
        }  catch (Throwable t) {

        }

    }

【问题讨论】:

  • 没有更详细的代码 sn-ps 很难说,但基本的多线程和并发仍然适用于您。因此,假设 eventProcessing 方法在一个类上并被多个侦听器调用,并且每个侦听器传入的 Event 对象对于各个侦听器都是唯一的,我认为您在这里是非常线程安全的

标签: java spring-boot activemq spring-jms


【解决方案1】:

您的侦听器必须是线程安全的 - 没有字段(类级变量),或者它们必须受到同步保护。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2011-12-02
    • 2021-10-09
    • 2018-12-03
    相关资源
    最近更新 更多