Bagaimana cara membuat Pesan saya di Integrasi Musim Semi?

Saya memiliki aplikasi yang saya kodekan yang saya refactoring untuk memanfaatkan Integrasi Musim Semi dengan lebih baik. Aplikasi memproses isi file.

Masalahnya (menurut saya) adalah implementasi saya saat ini melewati Files bukannya Messages, yaitu Integrasi Musim Semi Messages.


Untuk menghindari pengguliran lebih lanjut kode saya sendiri, yang kemudian harus saya pertahankan nanti, saya bertanya-tanya apakah ada struktur yang disarankan untuk membuat Pesan dalam Integrasi Musim Semi. Yang saya ingin tahu adalah apakah ada kombinasi channel yang direkomendasikan dengan sesuatu seperti MessageBuilder yang harus saya gunakan.


Proses/Kode (akhirnya)

Saya belum memiliki kode untuk mengkonfigurasinya tetapi saya ingin menyelesaikan komponen/proses berikut:

  1. Terima file, hapus header dan footer file, ambil setiap baris dan ubah menjadi Message<String> (Sepertinya ini sebenarnya Splitter) yang saya kirimkan ke...
  2. Saluran/Titik Akhir mengirimkan pesan ke Router
  3. Router mendeteksi format String di Payload dan merutekan ke saluran yang sesuai seperti Order Router di sini...
  4. Saluran yang dipilih kemudian membuat jenis Pesan yang sesuai, khususnya pesan yang diketik. Misalnya saya memiliki pembuat berikut untuk membuat Pesan...

    kelas publik ShippedBoxMessageBuilder mengimplementasikan CustomMessageBuilder {

    @Override pesan publik buildMessage(String input) { ShippedBox ShippedBox = (ShippedBox) ShippedBoxFactory.manufactureShippedFile(input); return MessageBuilder.withPayload(shippedBox).build(); } ...

  5. Pesan dirutekan menurut jenisnya ke saluran pemrosesan yang sesuai

Solusi yang saya maksudkan sepertinya saya telah memperumitnya. Namun, saya sengaja memisahkan dua tugas 1) Memecah file menjadi banyak baris Messages<String> dan 2) Mengubah Messages<String> menjadi Messages<someType>. Karena itu saya rasa saya memerlukan router/Pembuat Pesan tambahan untuk tugas kedua.


person Crowie    schedule 13.01.2014    source sumber


Jawaban (1)


Sebenarnya, ada MessageBuilder dalam Integrasi Musim Semi.

Tujuan umum Kerangka tersebut adalah untuk membantu pengembang back-end memisahkan kode domain mereka dari infrastruktur perpesanan. Terakhir, untuk bekerja dengan Integrasi Musim Semi, Anda harus mengikuti prinsip POJO dan Pemanggilan Metode.

Anda menulis layanan, transformator, dan model domain Anda sendiri. Kemudian Anda cukup menggunakan beberapa komponen yang sudah ada (misalnya <int-file:inbound-channel-adapter>) dan merujuk dari sana ke POJO Anda, tetapi tidak sebaliknya.

Saya sarankan Anda membaca buku Integrasi Musim Semi dalam Aksi untuk mendapatkan lebih banyak gambaran tentang masalah ini.

Bisakah Anda menjelaskan alasan untuk menangani komponen Integrasi Pegas secara langsung?

PEMBARUAN

1) Memecah file menjadi beberapa baris Pesan

<splitter> itu untukmu. Anda harus menulis beberapa POJO yang mengembalikan List<String> - baris dari file Anda tanpa header dan footer. Cara membaca baris dari File bukanlah tugas Integrasi Musim Semi. Terutama, jika "baris" tersebut adalah sesuatu yang logis, bukan baris file sebenarnya.

2) Mengubah Pesan menjadi Pesan

Sekali lagi: tidak ada alasan untuk membangun objek Message. Itu hanya cukup untuk membangun payload baru di beberapa transformator (sekali lagi POJO) dan kerangka kerja membungkus Pesannya untuk dikirim.

Payload Type Router berbicara sendiri: ia memeriksa jenis payload, tetapi tidak memeriksa jenis Pesan. Tentu saja, payload bisa menjadi Pesan juga, dan bahkan header apa pun juga bisa.

Pokoknya snapshot Builder Anda menunjukkan dengan tepat kreasi Pesan Integrasi Musim Semi pada akhirnya. Dan seperti yang saya katakan: cukup mengubah satu muatan ke muatan lainnya dan mengembalikannya dari beberapa POJO, yang akan Anda gunakan sebagai referensi transformator.

person Artem Bilan    schedule 13.01.2014
comment
Saya mencoba menggunakan komponen itu secara langsung sesuai keinginan saya untuk secara dinamis membuat Pesan yang berbeda dari String yang berbeda, dan kemudian berdasarkan Payload Pesan, mengarahkan pesan tersebut ke saluran yang berbeda. - person Crowie; 13.01.2014
comment
Bingung... Apa alasannya membuat Pesan berbeda? Buat muatan dan kerangka kerja yang berbeda saja yang akan menangani pembuatan Pesan. Komponen mana yang Anda gunakan? Tolong tunjukkan kode Anda. Ini mungkin memberi lebih banyak pencerahan... - person Artem Bilan; 13.01.2014
comment
Saya ingin membuat pesan yang berbeda karena saya ingin tipe Payload berbeda. Dalam satu kasus, POJO yang ditentukan, dalam kasus lain sebuah String. Yang saya miliki sejauh ini mengenai jalur refactoring ini adalah sebagai berikut.... - person Crowie; 13.01.2014
comment
‹int:payload-type-router input-channel=deirMessageInputChannel› ‹int:mapping type=java.lang.String channel=deirMalformedShippedFileChannel/› ‹int:mapping type=com.t2.lhr.daos.ShippedBox channel=deirShippedBoxChannel /› ‹/int:router-tipe-payload› - person Crowie; 13.01.2014
comment
Benar. PayloadTypeRouter terlihat bagus. Tapi tolong tunjukkan kode yang membuat pesan untuk router itu. - person Artem Bilan; 13.01.2014
comment
Saya mengerti maksud Anda tentang kerangka kerja yang membuat pesan sekarang maaf. Saya yakin saya akan memerlukan router sebelum trafo saya (karena saya memiliki dua tipe berbeda yang perlu dikembalikan oleh trafo). Selain itu - Terima kasih banyak! - person Crowie; 14.01.2014
comment
15 Januari 2014 Saya: Saya tidak lagi membuat pesan sendiri dan sekarang menggunakan kerangka kerja untuk mengelola keberadaan Pesan. Saya hanya mengembalikan POJO - person Crowie; 15.04.2016