跳到主要內容

發表文章

目前顯示的是有「Apache Camel」標籤的文章

Apache Camel - Syslog Receiver

Apache camel syslog元件透過netty接收連線,並將訊息轉為SyslogMessage物件,它支援RFC3164與RFC5424的訊息格式。目前測試後,可以正常收到RHEL、Ubuntu與SLES所送出的syslog;而vmware esxi的日期格式是iso8601,所以無法正常轉為SyslogMessage。 使用這個解法的好處是可以省去自己實作接syslog的listener與parse message的部分。 java @Test public void test ( ) throws Exception { CamelContext context = new DefaultCamelContext ( ) ; try { context. addRoutes ( new RouteBuilder ( ) { @Override public void configure ( ) throws Exception { String uri = "netty:udp://0.0.0.0:514?sync=false&allowDefaultCodec=false" ; from ( uri ) . unmarshal ( "syslog" ) . process ( new Processor ( ) { @Override public void process ( Exchange aExchangeData ) throws Exception {   if ( ! ( aExchangeData. getIn ( ) . getBody ( ) instanceof SyslogMessage ) ) return ;   SyslogMessage msg = ( SyslogMessage ) aExchangeData. getIn ( ) . getBody ( ) ; System . out . println ( msg ...

Apache Camel - Aggregator Hello World

Introduction Camel Aggregator提供開發人員能夠將大量訊息合成一個的功能。假設你的系統會接受外來通知,並將內容寫進資料庫中;一次連線寫一筆資料會比較快,還是透過一次連線寫入五筆資料快呢? 正常來說,一次連線寫入五筆同屬性資料會是比較快的。它與Throttler的最大區別在於,Throttler限制了client的請求,而Aggregator則是收集起來一次“後送”。因此,如果使用Aggregator,你的程式必需要有對應的處理方式。 我將透過HTTP GET請求/events/{id}做為範例,說明如何使用Aggregator去將單位時間內的請求,以{id}去分組並Aggregate成各別分組訊息。本篇文章中使用到兩個RouteBuilder,分別為RestRouteBuilder與AggregatorGroupRouteBuilder。RestRouteBuilder負責REST核心相關設定,可參考 先前文章 。接下來直接說明AggregatorGroupRouteBuilder。 (程式碼可參考 link ) AggregatorGroupRouteBuilder package org.tonylin.practice.camel.aggregator ;   import static com. google . common . base . Preconditions . checkState ;   import org.apache.camel.builder.RouteBuilder ; import org.apache.camel.processor.aggregate.GroupedExchangeAggregationStrategy ;   public class AggregatorGroupRouteBuilder extends RouteBuilder {   private final static String GET_EVENTS = "GET_EVENTS" ;   private Object eventHandler ; private int period = 500 ; ...

Apache Camel - Throttler Hello World

Introduction 在設計web應用程式時,有時會需要一個節流器,去幫我控制單位時間內能處理的請求數量,以避免過載;又或者是要根據不同使用者所買的授權,去控制單位時間內能呼叫的API次數等。Camel提供了Throttler,讓我們能輕鬆透過設定,去達到這些效果。 我將透過HTTP GET請求/events/{id}做為範例,說明如何使用Throttler。首先介紹這個範例中的兩個RouteBuilder。 (程式碼可參考 link ) RestRouteBuilder REST核心設定集中在這個builder中,它負責宣告用什麼port與component去建立REST服務: package org.tonylin.practice.camel.rest ;   import org.apache.camel.builder.RouteBuilder ; import org.apache.camel.model.rest.RestBindingMode ;   public class RestRouteBuilder extends RouteBuilder {   @Override public void configure ( ) throws Exception { restConfiguration ( ) . component ( "netty4-http" ) . port ( 8080 ) . bindingMode ( RestBindingMode. auto ) . endpointProperty ( "ssl" , "false" ) ; } } (我以http當範例,如果對https用法有興趣,可以參考 這篇 ) ThrottlerRouteBuilder 接下來是今天的主角,我先列出程式碼內容,後面再針對重點configure做說明: package org.tonylin.practice.camel.throttler ;   import static com. google . common . base . Preconditions . checkState ;   import org...