[자바] 프로덕션에서 Commons-pool을 사용하기위한 팁
누구든지 프로덕션에서 공유 풀을 사용하여 자신의 풀을 작성합니까?
예, 그렇습니다. 풀은 의도 한대로 TCP 연결을 유지합니다. Spring을 통해 연결되어 있으므로 Spring 구성을 이해한다고 가정합니다.
<bean class="com.company.ConnectionSupplier">
<constructor-arg>
<!-- The ConnectionSupplier wraps an object pool -->
<bean class="org.apache.commons.pool.impl.GenericObjectPool">
<constructor-arg>
<!-- The ObjectPool uses a ConnectionFactory to build new connections -->
<bean class="com.company.ConnectionFactory">
<constructor-arg value="server" />
<constructor-arg value="3000" />
</bean>
</constructor-arg>
<property name="maxActive" value="20" />
<property name="testOnBorrow" value="true" />
</bean>
</constructor-arg>
</bean>
ConnectionFactory는 BasePoolableObjectFactory를 확장하고 SocketFactory를 둘러싼 작은 래퍼입니다.
@First 코멘트 : ConnectionFactory 생성자는 서버와 포트를받습니다. 재정의 된 makeObject ()에서 해당 서버 및 포트에 연결하는 소켓을 만듭니다. 생성 된 소켓을 소켓을 통해 통신하기위한 몇 가지 편리한 메소드로 감싸는 'Connection'객체를 반환합니다.
연결은 소켓을 통해 통신하는 데 사용되는 프로토콜에서 제공하는 일종의 'ping'또는 'echo'를 사용하여 테스트됩니다. 그것이 가능하지 않은 경우, 소켓이 닫혔는지 묻는 것을 제외하고는 연결의 유효성 검사 / 테스트가 실제로 불가능합니다. 이 경우 예외가 발생하면 풀의 Connection이 무효화되고 Connections를 사용하는 모든 메소드는 이러한 종류의 실패에 대비하고 다른 연결로 동일한 작업을 시도해야합니다.
-------------------인스턴스화에 더 많은 비용이 들거나 풀에서 가져 오는 데 드는 비용을 확인해야합니다. 풀을 사용하는 유일한 유효한 상황이 첫 번째이기 때문입니다.
-------------------Netty 또는 Apache MINA 를 살펴 보셨습니까 ? 둘 다 TCP 연결을 추적하고 TCP 소켓이 사용하는 통신 프로토콜을 쉽게 구현할 수 있도록해야합니다.
-------------------먼저 commons-pool 1.3을 사용하지 마십시오. 다중 스레드 응용 프로그램에 몇 가지 주요 문제가 있습니다.
둘째, Java 5 동시성 패키지에는 적절한 풀 구현이 있습니다 ( 여기에서 샘플 참조 ).
-------------------MultiThreadedHttpConnectionManager를 확인하세요 . Apache Commons HttpClient 커넥션 풀 관리자로 여러분의 필요에 바로 맞출 수 있습니다.
출처
https://stackoverflow.com/questions/2005993