'activemq'에 해당되는 글 4건

  1. 2008/09/07 Camel Activemq Performance Tuninging (1)
  2. 2008/05/14 activemq restart시 예외 : java.io.UTFDataFormatException (6)
  3. 2007/10/19 Working with CamelContexts and RouteBuilders (10)
  4. 2007/10/11 apache camel (14)
성능에 대한 의심은 항상 끊임없이 가져야 한다.

이번에 신규서비스 오픈을 하면서 내가 가진 잘못된 상식으로 큰 문제가 생겼다.

당연히 그렇게 되겠지라고 생각한 부분이 있었는데 잘 안되는 것이다.

간만에 찾아오는 어려움이다. 빨리 해결을 해야 하는데...

아직까지도 근본적으로 문제가 해결된 상태는 아니기때문에 맘이 편치 않다.

나를 힘들게 하는 production은 바로 apache camel(activemq)! 대충 쓸때는 너무 쉬웠는데, 잘 쓰려니 생각해야 할게 많구나!

웹서핑하면 답이 좀 나와야 하는데, 대용량 서비스에 실제적으로 쓰는 사람은 몇 안되는거 같다. 국내는 말할것도 없고, 구글신도 몇개 링크 밖에 못 보여주고, 그나마 나오는 링크들도 몇번씩 쳐다본 매뉴얼이라는거..^^;

오픈 이후 오늘이 3일째인가? 드디어 감을 잡았다...T.T

아이디어는 찾아냈지만, 이것 또한 적정 수준을 만드는데 쉽지는 않을꺼 같다.

항상 느끼는 거지만, 어떤 어려운 일도 기본을 잘 생각하면 해결이 가능하다.

이번 경험은 나에게 또 하나의 큰 경험이 되고 있다.

이번 사건이 해결이 되고 나면, 양질의 포스트를 하나 쓸수 있을거 같다. 기대하시라~


Posted by ologist
어느날 갑자기 개발장비에 있는 mq를 restart를 하는데 java.io.UTFDataFormatException가 발생을 하면서 제대로 올라가지 않았다.

몇가지 의심을 해보았다.
- production branch와 코드가 다른 것이 있는가?
- 설정파일에 인코딩 문제가 있나?
- 윈도우와 리눅스 머신 둘다 잘 안되는가?

첫번째 compare를 해서 다른 branch간에 차이점을 찾았지만, 없었다...-.-

설정파일을 열어보면 영어이외에 다른 멀티바이트 문자가 존재하지 않았다. (이거 파일의 인코딩 문제도 아니잖아!)

로컬 윈도우에서 mq를 올려봤다 잘 올라간다. 그럼 윈도우에서는 되고, 리눅스에서는 안되는건가? 아니다. 다른 개발장비의 리눅스머신에서는 잘되고 있다.

환경설정 문제가 아닐까 생각을 하면서 일단 접고 운동을 하고 집에 갔다. 다음날 아침에 mq를 처음에 설치한 사람이 있어서 도움을 요청했다. 역시 만족할만한 힌트를 얻었고, 처리를 했다.

mq는 서비스가 내려갈때 file DB를 사용하게 되어있는데, 잘못된 타입(인코딩?)의 글자로 인코딩이 되어서 내려간거 같다. mq가 올라가면서 Unmarshal을 하는데 예외가 발생을 한것이였다.

언제 이런 상황이 발생을 하는지 알수 없었다. 개발장비라 난잡한 상황이 자주 발생을 하기 때문에 이 원인을 찾는 것도 쉽지 않은 일이다. 내가 처리한 방법은  저장된 파일을 모두 제거를 하고 mq를 띄우니 제대로 컨텍스트가 올라갔다.

근본적인 원인을 찾진 못했지만, 문제가 된 부분을 제거할 수는 있었다.

아래는 에러로그를 캡쳐했다. 로그를 볼때 주의 깊게 봐야 하는데, 이번에 놓친 부분은 ERROR나기전에 나오는 INFO레벨의 로그이다. 이 부분을 잘보면 무엇을 하다가 예외가 발생을 했는지 살펴보기 좀더 쉽다.
 
로그를 통해서 lifecycle을 살펴보면 Broker서비스가 올라갈때 기존에 정의된 파일 위치에서 읽어서 메모리로 복구를 시도를 한다. 이 부분에서 문제가 생겨서 Broker서비스자체가 올라가는데 실패를 한 것이다.

이번건을 처리하면서 잊었던 기억하나는 대부분의 문제의 해결방법은 로그에 거의 있다는 것이다. 좀더 로그가 친절했으면 좋을뻔했지만, 상황만 더 이해를 했다면 쉽게 찾을 수 있는 문제였다.

잘되는 것과 안되는 것이 있으면 차이점을 빠르게 파악을 해서 의심의 범위를 줄이는 것도 중요하다. 이 경우 많은 삽질을 하게 되는데 그 공수를 줄이는 것이 중요하다. 그때 매뉴얼과 로그는 문제해결의 둘도 없는 친구이다. 로그의 중요성을 다시 한번 되새긴 경험이었다...^^

2008-05-13 20:00:12 [INFO ](JournalPersistenceAdapter.java:464) Journal Recovery Started from: Active Journal: using 5 x 20.0 Megs at: /env/activemq/activemq-data/journal
2008-05-13 20:00:12 [ERROR](BrokerService.java:412) Failed to start ActiveMQ JMS Message Broker. Reason: java.io.UTFDataFormatException: bad string
java.io.UTFDataFormatException: bad string
        at org.apache.activemq.util.DataByteArrayInputStream.readUTF(DataByteArrayInputStream.java:286)
        at org.apache.activemq.openwire.v2.BaseDataStreamMarshaller.looseUnmarshalString(BaseDataStreamMarshaller.java:536)
        at org.apache.activemq.openwire.v2.ProducerIdMarshaller.looseUnmarshal(ProducerIdMarshaller.java:119)
        at org.apache.activemq.openwire.OpenWireFormat.looseUnmarshalNestedObject(OpenWireFormat.java:445)
        at org.apache.activemq.openwire.v2.BaseDataStreamMarshaller.looseUnmarsalCachedObject(BaseDataStreamMarshaller.java:454)
        at org.apache.activemq.openwire.v2.MessageIdMarshaller.looseUnmarshal(MessageIdMarshaller.java:119)
        at org.apache.activemq.openwire.OpenWireFormat.looseUnmarshalNestedObject(OpenWireFormat.java:445)
        at org.apache.activemq.openwire.v2.BaseDataStreamMarshaller.looseUnmarsalNestedObject(BaseDataStreamMarshaller.java:436)
        at org.apache.activemq.openwire.v2.MessageAckMarshaller.looseUnmarshal(MessageAckMarshaller.java:133)
        at org.apache.activemq.openwire.OpenWireFormat.looseUnmarshalNestedObject(OpenWireFormat.java:445)
        at org.apache.activemq.openwire.v2.BaseDataStreamMarshaller.looseUnmarsalNestedObject(BaseDataStreamMarshaller.java:436)
        at org.apache.activemq.openwire.v2.JournalQueueAckMarshaller.looseUnmarshal(JournalQueueAckMarshaller.java:117)
        at org.apache.activemq.openwire.OpenWireFormat.doUnmarshal(OpenWireFormat.java:349)
        at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:204)
        at org.apache.activemq.store.journal.JournalPersistenceAdapter.recover(JournalPersistenceAdapter.java:470)
        at org.apache.activemq.store.journal.JournalPersistenceAdapter.start(JournalPersistenceAdapter.java:225)
        at org.apache.activemq.broker.BrokerService.createRegionBroker(BrokerService.java:1251)
        at org.apache.activemq.broker.BrokerService.createBroker(BrokerService.java:1209)
        at org.apache.activemq.broker.BrokerService.getBroker(BrokerService.java:508)
        at org.apache.activemq.broker.BrokerService.start(BrokerService.java:394)
        at org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:47)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
Posted by ologist
어제는 3pair(응주,주선,선화)를 하면서 camel  API를 이용해서 구현을 하였다.
spring을 익힐 때도 그렇지만, 잘된 API들은 익히면, 깨달음을 가지게 해준다.

인터페이스 네이밍의 의미가 조금 헷갈린것도 있지만, 사고의 차이에서 오는 gap이라는 생각이다.
좁은 의미냐? 아니면, 전체로 봤을 때의 쓰임새냐에 따라서도 네이밍을 잘해야 한다.

get started를 읽으면서....
특정 컨텍스트에 대한 설계와 구현방법은 아래와 같이 단계별 요약이 가능하고, 간결하게 표현이 되야 한다. 아래에 4가지 step에 대한 표현이 내 마음을 흔들고 있다.  

Working with CamelContexts and RouteBuilders

To get started with Camel:

  1. Create a CamelContext.
  2. Optionally, configure components or endpoints.
  3. Add whatever routing rules you wish using the DSL and RouteBuilder or using XML Configuration.
  4. Start the context.

Posted by ologist
 TAG activemq, Camel

2007/10/11 09:41 Developer

apache camel

슬슬 API를 살펴볼까?
http://activemq.apache.org/camel/


사용용도는 async task를 처리하기 위한 메세지큐를 구축하고 API를 좀더 쉽게 사용하기 위해서 사용하는 모듈입니다.

tomcat + activemq + spring + camel조합으로 MQ를 구축하는 것이죠. 저도 처음 써보는 거라 API학습이 필요로 해서 일단 가져왔습니다...^^

  • hugely improved Bean Integration to work nicely with beans and Camel; making Camel even less intrusive
  • improved Spring XML support using JAXB2 and code-generating a nice XML Schema
  • new Enterprise Integration Patterns like Aggregator, Throttler, Delayer
  • new Languages Supported such as EL and OGNL
  • new Components like VM, Event, Log, Validation, Jing, MSV
  • new Examples such as Spring Example, ETL Example and BAM
  • improved distributed testing with via the Mock component
  • new Camel Maven Plugin for easier running of Camel routes and Examples in Maven
  • Posted by ologist
     TAG activemq, Camel, MQ
    이전버튼 1 이전버튼

    블로그 이미지
    ologist

    공지사항

    Yesterday171
    Today52
    Total34,795

    달력

     « |  » 2012.02
          1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29      

    최근에 받은 트랙백

    글 보관함