문제

2-4 서버 환경에서 내장 서버 장애 조치를 사용하는 TIBCO EMS 솔루션이 있습니다. TIBCO Admin Admins는 한 EMS 서버에서 다른 서버로의 실패 서비스를 사용하는 경우 연결은 EMS 서비스 수준에서 자동으로 새 서버로 전송되어야합니다. EMS 서비스를 사용하는 C# 애플리케이션의 경우 이런 일이 발생하지 않습니다. 실패 후 사용자 연결이 새 서버로 전송되지 않으므로 이유는 확실하지 않습니다.

STARY에서 EMS에 대한 애플리케이션 연결 만 따라서 사용자가 응용 프로그램을 시작한 후 TIBCO Admins Failover가 새로운 서버에 다시 연결하려면 앱을 다시 시작해야합니다 (EMS 연결은 4 개의 프로덕션 EMS 서버를 포함하여 서버 문자열을 사용합니다. - 첫 번째 시도가 실패하면 문자열의 다음 서버로 이동하여 다시 시도합니다).

연결이 죽었다는 것을 감지하면 주기적으로 EMS에 다시 연결하려는 자동화 된 접근 방식을 찾고 있습니다.

어떤 아이디어? 우리는 tibco.ems.dll 버전 4.4.2 및 .NET 2.X (SmartClient App)를 사용하고 있습니다.

모든 도움이 감사하겠습니다.

도움이 되었습니까?

해결책

이 게시물은 내 현재 의견을 요약하고 내 접근 방식을 더 자세히 설명해야합니다 ...

TIBCO 'ConnectionFactory'및 'Connection'유형은 헤비급, 스레드 안전 유형입니다. TIBCO는 사용을 유지한다고 제안합니다 하나 ConnectionFactory (서버 구성 공장 당) 및 하나 공장 당 연결.

서버도 나타납니다 현장 '연결'장애 조치 및 다시 연결을 담당하려면 작업을 수행하고 있음을 확인한 다음 해당 기능에 의지하십시오.

클라이언트 측 솔루션을 작성하는 것은 서버 또는 클라이언트 설정 문제를 해결하는 것보다 약간 더 관여 할 것입니다. 실패한 연결에서 만든 모든 세션은 재창조해야합니다 (생산자, 소비자 및 목적지는 말할 것도 없습니다). 어느 유형에도 "다시 연결"또는 "새로 고침"메소드가 없습니다. 세션은 부모 연결에 대한 참조를 유지하지 않습니다.

연결/세션 객체 조회를 관리하고 모든 사람을 다시 시작하는 견과류를 관리해야합니다! 또는 새로운 연결을 가져오고 다시 연결할 수있는 일종의 세션 실패 이벤트 핸들러를 구현하십시오.

따라서 현재로서는 클라이언트가 장애 조치 알림을 받도록 설정되어 있는지 확인하고 살펴 보겠습니다 (TIB EMS 사용자 안내서 PG 292). 그리고 제기 된 예외가 잡히고, 장애 조치 URL을 포함하고, 제대로 처리되고 있는지 확인하십시오.

다른 팁

우선, 예, 나는 내 자신의 질문에 대답하고 있습니다. 그러나 Ajmastrean이 없다면 나는 어디에도 없을 것입니다. 매우 감사합니다!

하나 : ConnectionFactory.setReconnattemptCount, SetReconnatMptdElay, setReconnattemptimeout을 적절하게 설정해야합니다. 기본값이 너무 빨리 다시 출시된다고 생각합니다 (재 검색간에 1/2 초의 순서). EMS 서버는 네트워크 스토리지 등으로 인해 장애 조치에 오랜 시간이 걸릴 수 있으므로 1/2S 간격의 5 회의 재시는 거의 길지 않습니다.

둘 : 클라이언트-서버 및 서버 클라이언트 하트 비트를 가능하게하는 것이 중요하다고 생각합니다. 확인할 수는 없었지만 제자리에 있지 않으면 클라이언트가 서버가 오프라인 상태 또는 장애 조치 모드에서 전환한다는 알림을받지 못할 수 있습니다. 물론 이것은 EMS의 서버 측 설정입니다.

3 : tibems.setexceptiononftswitch (true)를 설정하여 장애 조치 이벤트를 볼 수 있습니다. 그런 다음 예외 이벤트 핸들러를 배선합니다. 단일 서버 환경에서 "연결이 종료되었습니다"메시지가 표시됩니다. 그러나 결함 내성 멀티 서버 환경에있는 경우 "연결이 결함 내전형 스위치를 수행했습니다". 이 알림이 엄격하게 필요하지는 않지만 (특히 테스트에서) 유용 할 수 있습니다.

Four : EMS 문서에서는 명확하지 않으며, Connection Reconnect는 단일 서버 환경에서 작동하지 않습니다. 다중 서버, 결함 허용 환경에 있어야합니다. 그러나 트릭이 있습니다. 연결 목록에 동일한 서버를 두 번 넣을 수 있습니다. 이상하게 알고 있지만 작동하며 내장 재 연결 로직을 작동시킬 수 있습니다.

일부 코드 :

private void initEMS()
{
    Tibems.SetExceptionOnFTSwitch(true);
    _ConnectionFactory = new TIBCO.EMS.TopicConnectionFactory(<server>);
    _ConnectionFactory.SetReconnAttemptCount(30);       // 30retries
    _ConnectionFactory.SetReconnAttemptDelay(120000);   // 2minutes
    _ConnectionFactory.SetReconnAttemptTimeout(2000);   // 2seconds
_Connection = _ConnectionFactory.CreateTopicConnectionM(<username>, <password>);
    _Connection.ExceptionHandler += new EMSExceptionHandler(_Connection_ExceptionHandler);
}
private void _Connection_ExceptionHandler(object sender, EMSExceptionEventArgs args)
{
    EMSException e = args.Exception;
    // args.Exception = "Connection has been terminated" -- single server failure
    // args.Exception = "Connection has performed fault-tolerant switch to <server url>" -- fault-tolerant multi-server
    MessageBox.Show(e.ToString());
}

클라이언트 응용 프로그램은 tibco.tibjms.ft.switch.xection 시스템 속성을 설정하여 장애 조치 알림을받을 수 있습니다.

아마도 도서관이 작동하기 위해 필요합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top