Sunday, November 3, 2013

REST service aggregator di WSO2 ESB


Sekilas tentang ESB (Enterprise Service Bus)

Enterprise Service Bus  adalah sebuah platform integrasi berbasisstandar yang mengabungkan pesan, layanan web, transformasi data dan routing cerdas untuk menghubungkdan dan mengkoordinasikan interaksi sejumlah aplikasi yang beragam di suatu perusahaan dengan integritas transaksional (Chappell, 2004). Dengan kata lain ESB merupakan infrastruktur untuk mengintegrasikan aplikasi dan layanan. ESB memperkuat SOA melalui pengurangan jumlah, ukuran dan kompleksitas interface antara aplikasi dan layanan-layanan.
(dikutip dari : wikipedia)

Tugas utama ESB adalah:
1. Memantau dan mengontrol routing pertukaran pesan antar layanan
2. Mengatasi konflik/ketidaksesuaian antar komponen layanan komunikasi
3. Mengontrol penyebaran dan versioning dari layanan
4. Penyusunan penggunaan servis redundant
5. Melayani jasa komoditas seperti penanganan event, transformasi data dan pemetaan, pesan dan event antrian serta penanganan, keamanan atau pengecualian penanganan, konversi protokol dan menguatkan kualitas layanan komunikasi yang tepat

Dalam tutorial kali ini kita akan menggunakan WSO2 ESB. ESB ini bersifat open source.  Mengenai detail dan keunggulan apa saja di software ini dapat dilihat di situsnya langsung di wso2.com

Tutorial kali ini akan khusus membahas bagaimana cara aggregasi 2 buah atau lebih Rest webservice menjadi 1 output Rest.

Pengantar Aggregator

The Aggregator menggabungkan hasil individu, pesan terkait sehingga mereka dapat diproses secara keseluruhan. Dia bekerja sebagai filter stateful, mengumpulkan dan menyimpan beberapa message individu menjadi satu set message yg utuh dan kemudian mengirimkannya. (http://www.eaipatterns.com/Aggregator.html)



Dari gambar diatas terlihat ada 3 service message yg terpisah (Inventory item 1, item 2, item 3). Oleh si Aggregator 3 message tersebut akan diAggregasi menjadi 1 service yakni Inventory Order

Kita langsung saja pada contohnya.

1. Download terlebih dahulu software WSO2 ESB (http://wso2.com/products/enterprise-service-bus/). Berbentuk file zip.
Ekstrak file zip tersebut, kemudian masuk ke direktori /bin.
Jalankan wso2server.bat (windows) atau wso2server.sh (Unix)

2.  Jalankan https://localhost:9443
Tampilannya seperti ini


Untuk login awal masukkan username : admin password : admin



3. Kita siapkan dulu Rest webservice nya.
Untuk cara paling mudah bisa menggunakan framework Spring MVC.
Untuk cara membuatnya akan saya bahas ditutorial berikutnya. ☺

Asumsinya sudah tersedia 2 buat Rest webservice :
http://localhost:8087/sample/students/get

saat dipanggil dibrowser outputnya seperti ini :

http://localhost:8088/sample/schools/getStudent


Kedua Rest diatas mempunyai element yg sama yakni ‘students’, tetapi isi datanya berbeda. Element inilah nanti yang akan diAggregasi
Syarat melakukan aggregasi, Rest nya harus memiliki element yg sama

4.  Kita buka kembali halaman console WSO2.
Kita kita pilih di menu utama -> Source View



Kemudian kita buat script service proxy sebagai berikut (misal namanya : StudentAggregateProxy) :

 <?xml version="1.0" encoding="UTF-8"?>  
 <proxy xmlns="http://ws.apache.org/ns/synapse"  
     name="StudentAggregateProxy"  
     transports="https,http"  
     statistics="disable"  
     trace="disable"  
     startOnLoad="true">  
   <target>  
    <inSequence>  
      <log level="full"/>  
      <clone>  
       <target>  
         <endpoint name="ReceiverA">  
          <address uri="http://localhost:8087/sample/students/get/" format="rest"/>  
         </endpoint>  
       </target>  
       <target>  
         <endpoint name="ReceiverB">  
          <address uri="http://localhost:8088/sample/schools/getStudent/" format="rest"/>  
         </endpoint>  
       </target>  
      </clone>  
    </inSequence>  
    <outSequence>  
      <aggregate>  
       <completeCondition>  
         <messageCount/>  
       </completeCondition>  
       <onComplete expression="//students">  
         <send/>  
       </onComplete>  
      </aggregate>  
    </outSequence>  
   </target>  
   <description/>  
 </proxy>  

Tambahkan script diatas ke source view. Kemudian update.

Pada inSequence kita melakukan clone masing masing target Rest endpoint.  
Pada outSequence (outputnya) kita melakukan aggregasi menggunakan tag <aggreagte>. Kemudian pada onComplete ditambahkan expression “//students”. Ini artinya element “students” dari masing masing output endpoint akan diAggregate (digabungkan)                      

5.  Maka service proxy akan otomatis ditambahkan.
Pilih menu Service -> list.
Maka service proxy “StudentAggregateProxy” akan muncul di listnya



Untuk mengedit service proxy yg kita sudah buat. Klik “Source View”



6.  Selanjutnya akan kita coba servicenya.
Kita panggil url : http://localhost:8280/services/StudentAggregateProxy/


di ouputnya terlihat data ‘students’ dari enpoint pertama dan kedua sudah digabungkan.

Sebenarnya masih banyak hal yang perlu diexplore tentang aggregasi ini, sebab masih ada kelemahannya. Misalnya salah satu endpoint sedang mati, maka service proxy nya tdk jalan atau error.
Jadi mari sama-sama kita pelajari :)

Terima kasih.
Selamat mencoba ☺

No comments:

Post a Comment