카테고리 없음

[자바] 프로덕션에서 Commons-pool을 사용하기위한 팁

행복을전해요 2021. 1. 9. 17:06

누구든지 프로덕션에서 공유 풀을 사용하여 자신의 풀을 작성합니까?

예, 그렇습니다. 풀은 의도 한대로 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