طلب الرد نموذج هجين الصابون على HTTP/الدائرة على الوسيطة

StackOverflow https://stackoverflow.com/questions/1621532

سؤال

واحد من منتجاتنا الأدوات التالية في اتجاه واحد خدمة ويب هيكل:

Server <--------------------- Middleware <---------------- Client
        SOAP over JMS (queue)              SOAP over HTTP

في هذا النموذج ، للعملاء إرسال الصابون الرسائل عبر HTTP لدينا الوسيطة (التقدم SonicMQ).الرسائل يدفع بها إلى الدائرة طوابير من قبل SonicMQ و الخادم يجلب لهم من هناك.ولكن كما ترى لا يقوم الملقم إرسال استجابة إلى العميل (غير متزامن الدائرة).

نود أن تنفيذ استجابة القناة إلى هذا النموذج.غالبا ما اقترح الحل هو إنشاء المؤقتة replyTo-الانتظار (على الطاير) في الوسيطة ، مما يسمح الملقم إرسال استجابة إلى أن قائمة الانتظار.ثم العميل يمكن جلب الرد و replyTo-طابور مغلقة.هذا يبدو مريحة بما فيه الكفاية ، ولكن للأسف عملائنا تعمل على HTTP العادي وليس على الدائرة ، لذلك لا يمكن للعملاء بسهولة انشاء replyTo قوائم الانتظار.

نهج واحد لتحقيق استجابة القناة في مثل هذه الهجين HTTP/الدائرة الصابون النموذج سيكون لتكوين الوسيطة لفتح replyTo طابور على كل ناجح الصابون تلقي إلحاق replyTo-طابور و معلومات المرسل إلى رسالة SOAP ودفع رسالة إلى قائمة انتظار ، حيث سيكون المنال من قبل الملقم.بعد تلقي و معالجة الرسالة إرسال الخادم استجابة ورد replyTo-الانتظار في الوسيطة.وأخيرا الوسيطة إرسال الرد (الصابون) عبر HTTP العودة إلى الأصل العميل باستخدام البيانات من الصابون رسالة (البيانات التي تم إدراجها في الوسيطة الإجراءات عند الطلب تلقى أول).

في حين بروبابلي ممكن ، يبدو هذا النوع من المباراة.لذا فإن السؤال هو:أي منظف سبل تحقيق هذا طلب/استجابة نموذج على قضيتنا ؟ نهاية الملقم قد تم تنفيذها في جافا.

الحل:

التقدم SonicMQ يدعم "محتوى الرد إرسال" HTTP متقبل ، والذي يسمح بسهولة إرسال الدائرة الرد.محتوى الرد إرسال متقبل يعمل على النحو التالي:

  • متقبل يتلقى HTTP رسالة العميل إرسال
  • متقبل يخلق المؤقتة الدائرة الانتظار
  • متقبل يبني الدائرة رسالة تحتوي HTTP الجسم, و يضيف مؤقتة في انتظار تحديد حديثا إنشاء الدائرة الرسالة
  • متقبل يدفع الدائرة الرسالة إلى وجهتها طابور (وليس مؤقت طابور)
  • متقبل يبدأ استهلاك المؤقتة الرد على الانتظار
  • عند العميل جلب رسالة من الوجهة الأصلية الانتظار ، يحتوي على مجموعة الرد على انتظار تحديد
  • العميل يستهلك رسالة
  • يرسل العميل الرد على الرد على الانتظار
  • متقبل يتلقى الرسالة من قائمة الانتظار
  • متقبل يرسل رسالة HTTP العميل الذي أرسل أصلا HTTP رسالة

يجب أن المستهلك ("server" في حالتنا) تفشل و لا ترسل الرد مما تسبب في مهلة سونيك HTTP متقبل يرسل HTTP رسالة إلى العميل مما يدل على المهلة.هذه هي ميزة قياسية في SonicMQ.أعتقد أنه موجود في المنتجات الأخرى كذلك.

وهذا يسمح باستخدام الصابون العادي على الدائرة (انظر skaffman الجواب) في "الخادم" end يتجنب أي برمجة مخصصة في الوسيطة.

ما زلت أرى بعض المشاكل في الدائرة نموذج الرغم من ذلك ، ولكن هذا هو بالتأكيد تحسنا.

تحديث 2009-11-05:

بعد البحث في هذه المسألة أكثر من ذلك ، اتضح ظني ضد HTTP<-->الوسيطة<-->الدائرة كانت ذات الصلة.

هناك عدد قليل من المشاكل الحرجة في هذا النموذج.متزامنة-غير متزامنة مع نموذج الوسيطة ببساطة ليست مريحة.إما أن يكون كلا الطرفين تنفيذ الدائرة الاتصال (التي ينبغي أن الصخرة) أو HTTP في كلا طرفي.خلطها النتائج فقط في الصداع.من هذين ، الصابون-أكثر-HTTP هو أبسط وأفضل دعم من الصابون على الدائرة.

مرة أخرى:إذا كنت تقوم بتصميم هذا النوع من النظام...لا.

هل كانت مفيدة؟

المحلول

لا, لا أعتقد أن اقترح الحل هو الإختراق على الإطلاق ، أعتقد أن هذا هو الحل الصحيح.لديك عميل الطبقة الوسطى مع بروتوكول متزامن ، ثم الوسطى خادم طبقة باستخدام غير متزامن الطبقة التي لديك لإضافة رد المسار من أجل تلبية متزامن دلالات.هذا ما الوسيطة هو.تذكر أن الدائرة توفر الدعم الصريح المؤقتة الرد على قوائم الانتظار ، لن تحتاج إلى الفوضى مع الحمولة على الإطلاق.

أكثر الميدان هو إمكانية الاستفادة من حقيقة أن الصابون 1.2 صمم مع الدائرة في العقل ، لذلك يمكن استخدام خدمة ويب الطبقة الوسيطة بين الخادم الطبقة التي لا الصابون على الدائرة.هذا يعني أنك يمكن أن تبقي الصابون من نهاية إلى نهاية ، مع الوسيطة فقط تغيير النقل.

فقط خدمة ويب كومة أن أعرف من الذي يدعم الدائرة النقل الربيع خدمات الويب, حيث عملية التنمية موثقة هنا.وهذا من شأنه أيضا تعطيك الفرصة المنفذ الخاص بك الصابون طبقة الربيع-WS التي ركلات الحمار :)

نصائح أخرى

لماذا لا تضيف رابط الصفحة تتيح للمستخدمين التحقق من أن ترى عندما رد جاهز ، على غرار بنك الاحتياطي الفيدرالي السابق تعقب هوية ؟ إعطاء المستخدمين تعقب معرف عند إرسال الطلب.

هذا من شأنه أن يصلح في طلب HTTP/الاستجابة المصطلح, و سيكون للمستخدمين لا تزال تعرف أن هذا الطلب هو "النار وننسى".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top