0

すべての Bean を同時にロードしてキャッシュする BeanFactory 実装はありますか?

完璧なシナリオでは、すべての Bean を異なるスレッドで実行したいと考えています。今すぐ可能ですか?または、このために独自の実装を作成する必要がありますか?

シナリオ: すべての Bean にメッセージ キュー チャネルが割り当てられており、非同期で通信しています。デフォルトの実装では、すべての Bean が同じスレッドにあります。つまり、たとえば 50 個の Bean があり、それぞれが 1 秒あたり 10 メッセージのように大量の処理を行うと、すぐにこれらのメッセージが処理されるときに遅延が発生します。

4

2 に答える 2

1

解決策は使用することだと思いますConcurrentMapCacheFactoryBean

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/cache/concurrent/ConcurrentMapCacheFactoryBean.html

例えば。

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

    <cache:annotation-driven/>

    <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
        <property name="caches">
            <set>
                <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>
            </set>
        </property>
    </bean>
</beans>

使用方法の例については、次を参照してください。

于 2012-09-18T21:40:13.060 に答える
0

今日、Spring Integration を調べたところ、シナリオに適していることがわかりました。ExecutorChannel を使用して、異なるスレッドのメッセージを一度に 1 つずつ処理できます。実際、BlockingQueue 自体を使用してシナリオを非常に簡単に実装できます。とにかく、お気遣いありがとうございます!

ところで、誰かが興味を持っているなら、これは私が思いついたものです:

Scenario for an individual Bean:
Allocate a blocking queue

Spawn a background thread which:
    Blocks until message is available in the MQ channel
    When message is available:
        Put a message inside a blocking queue and block until queue is not full
    Repeat the sequence

Spawn a background thread which:
    Blocks until queue is not empty
    Processes a message when it's available in the queue
    Removes a message from the queue indicating that processing is done
    Repeat the sequence
于 2012-09-19T12:35:01.093 に答える