Apache Camel هي مكتبة محرك قواعد عملية للغاية يمكن استخدامها لمعالجة الأحداث والمعلومات من مصادر مختلفة. يمكنك نقل الرسائل في بروتوكولات مختلفة مثل VM و HTTP و FTP و JMS ، وحتى في نظام الملفات ، والحفاظ على منطق التشغيل الخاص بك وفصل منطق الإرسال ، مما قد يجعلك أكثر تركيزًا على محتوى الرسالة.
في هذه المقالة ، سأقدم عرضًا لدخول جافا Apache Camel.
أولا قم بإنشاء pom.xml لمشروع Maven.
<إصدار XML = "1.0" ترميز = "UTF-8"؟ .org/2001/xmlschema-instance "xsi: schemalocation =" http://maven.apache.org/pom/4.0.0http://maven.apache.org/maven- . project.build.sourceencoding> utf-8 </project.build.sourceencoding> <camel.version> 2.11.1 </camel.version> </properties> ency> <roupiD> org.apache.camel </rougiD> < ArtifactId> Camel-Core </stifactid> <soph> $ {camel.version} </version> </reperence> <redency> org.slf4j </groupid> <TroTfactId> slf4j-simple </sontifactid> <الإصدار> 1.7 .5 </version> </sependency> </هنا نستخدم فقط حزمة Camel-Core.jar ، في الواقع توفر العديد من المكونات العملية التي قد تستخدمها. لغرض سجلات السجل ، استخدمت SLF4J البسيطة كتطبيق سجل السجل ، حتى نتمكن من رؤية الإخراج من وحدة التحكم.
بعد ذلك ، نحتاج فقط إلى إنشاء فئة توجيه. يتم تعريف الطرق من خلال كيفية تمرير الرسالة من طرف إلى الطرف الآخر. سنقوم بإنشاء ملفات SRC/MAIN/JAVA/CAMELCORDEMO/TIMERROUTEBUILDER.JAVA ، ونرسل رسالة إلى المعالج كل ثانية ، وطباعتها ببساطة.
حزمة camelcoremo ؛ من ("الوقت: // timer1؟ الفترة = 1000").ما سبق هو كل الحاجة لهذا المثال ، والآن تجميع وتشغيل.
bash> mvn compileBash> mvn exec: java -dexec.mainclass = org.apache.camel.main.main -dexec.args = '-r camelcoremoroutebuilder'
لاحظ أنه لم نكتب المدخل الرئيسي لفئة Java.
السيطرة على camelcontext
عند بدء تشغيل الجمال ، سيقوم بإنشاء كائن CamelContext ، والذي يحتوي على الكثير من المعلومات حول كيفية تشغيل الجمال ، ويتضمن أيضًا تعريف المسار الذي أنشأناه. الآن إذا كنت ترغب في الحصول على مزيد من التحكم من خلال CamelContext ، فأنت بحاجة إلى كتابة الرمز الرئيسي الخاص بك. أنا هنا مثال بسيط.
حزمة camelcoremo ؛ static void main (string [] args) {new timermain () ) ؛ ؛يمكن أن نرى أننا قد أعادنا استخدام فئة TimerRoutebuilder الحالية في طريقة CreterouteBuilder (). الآن يتم التحكم في فصلنا الرئيسي بالكامل عندما يتم إنشاءه وبدءه وإيقاف CamelContext. يتيح لك كائن Context (CamelContext) التحكم في كيفية تكوين الجمل في مستوى عالمي ، وليس على مستوى الطريق. يمنح رابط Javadoc جميع أساليب Setter ، ويمكنك دراسة ما يمكن أن تفعله.
لاحظ أننا نحتاج أيضًا إلى توفير كمية صغيرة من التعليمات البرمجية في فئتنا الرئيسية. بادئ ذي بدء ، نحن بحاجة إلى التعامل مع مشكلة الإغلاق الأنيق ، لذلك أضفنا وظيفة إغلاق Java لاستدعاء طريقة STOP () للسياق. ثانياً ، بعد بدء السياق ، نحتاج إلى إضافة كتلة مؤشر ترابط. إذا لم تقم بمنع موضوعك الرئيسي بعد بدء التشغيل ، فسيتم الخروج ببساطة بعد البدء ، وسيكون عديمة الفائدة. ستقوم بتشغيل الجمال كخدمة (مثل الخادم) حتى تضغط على مفتاح Ctrl+C لإنهاء العملية.
تحسين الفصل الرئيسي الذي يبدأ في إطلاق CamelContext
إذا كنت لا ترغب في معالجة رمز إعدادات الفئة الرئيسية بقدر ما هو مثال أعلاه ، فيمكنك ببساطة أن ترث Org.apache. باستخدام هذه الفئة ، لا يمكنك السماح فقط بتعيين سياقك تلقائيًا ، ولكن أيضًا الحصول على جميع خصائص سطر الأوامر الإضافية ، مثل المدة التي يتم فيها تشغيل عملية التحكم ، وتمكين التتبع ، وتحميل فئة مسار مخصصة ، وما إلى ذلك.
إعادة بناء المثال التالي ، الرمز كما يلي:
Package CareDemo ؛ static void main (args) {timermain2 main = new timermain2 () ؛ ؛}} الآن يكون رمز TimerMain2 أقل من ذي قبل ، يمكنك تجربته ، يجب أن يكون هو نفسه الميزات السابقة.
bash> mvn compileBash> mvn exec: java -dexec.mainclass = camelcoremo.timermain2 -dexec.args = '-t'
لاحظ أنه بعد أن نعطي خيار -T ، سيتم حجز تتبع المسار. استخدم -H سيشاهد جميع الخيارات المتاحة.
أضف الفول مع آلية تسجيل الجمل
في مثال TimerRouteBuilder السابق ، أنشأنا عملية مجهولة في الكود. الآن إذا كنت ترغب في تجميع عدد قليل من المشتريات المختلفة ، فإن إضافة الفول إلى إضافة آلية تسجيل الجمل سيقلل بشكل أفضل من ارتباك الكود. يتيح لك Camel استخدام المعالجة كحبة في مساحة التسجيل الخاصة بها ، ثم تحتاج فقط إلى تسميتها كمكونات فول. ما يلي هو رمز إعادة الإعمار الخاص بي:
الحزمة caredemo ؛ static void main (args) {TimerBeansmain main = new timerbeansmain () ؛ ()) ؛ = 1000 ") .to (" Bean: ProcessByBean1 ") .to (" Bean: Processagainbybean2 ") ؛ ents processor {public void process (Exchange msg) {log.info (" First Process {} "، msg) ؛}}} الفئة الثابتة تنفذ المعالج {public void Process (Exchange msg) {log.info ("Sec ond Process {}" ، msg) ؛}}}الآن أصبحت فئة الطريق أكثر وضوحًا وواضحة ، وفي الوقت نفسه ، تم إعادة بناء رمز المعالجة في فئة مستقلة. عندما تحتاج إلى كتابة طريق معقد للغاية لتحقيق منطق العمل ، يمكن أن تساعدك هذه الطريقة بشكل أفضل في تنظيم الكود الخاص بك واختباره. يتيح لك بناء فول بوجو الذي يمكن إعادة استخدامه مثل "LEGO". يمكن أيضًا استخدام مساحة تسجيل Camel للعديد من الاستخدامات الأخرى.
يتكون مثال المسار أعلاه من Java DSL.
آمل أن يساعدك هذا المقال في تخطي مرحلة استكشاف الإبل.