ملخص:
الهندسة المعمارية ، الموزعة ، قائمة انتظار السجل ، والعنوان نفسه هو وظيفة مجموعة السجل ، ولكن تتم إضافة redis في الوسط لعمل قائمة انتظار الرسائل. لماذا أحتاج إلى قائمة انتظار رسالة؟ عندما تظهر عوامل مثل "الإنتاج" و "الاستهلاك" في النظام ، تكون هناك حاجة إلى قائمة انتظار الرسائل للعمل كطبقة مجردة لسد الاختلافات بين الطرفين.
الهندسة المعمارية ، الموزعة ، قائمة انتظار السجل ، والعنوان نفسه هو وظيفة مجموعة السجل ، ولكن تتم إضافة redis في الوسط لعمل قائمة انتظار الرسائل.
لماذا أحتاج إلى قائمة انتظار رسالة؟
عندما تظهر عوامل مثل "الإنتاج" و "الاستهلاك" في النظام ، تكون هناك حاجة إلى قائمة انتظار الرسائل للعمل كطبقة مجردة لسد الاختلافات بين الطرفين.
على سبيل المثال ، يكتب البريد الإلكتروني المشترك والرسائل النصية القصيرة في نظامنا هذه الوظائف التي لا تتطلب استجابة في الوقت المناسب لقائمة الانتظار ، ومعالجة الطلبات بشكل غير متزامن ، وتقليل وقت الاستجابة.
كيف تحقق ذلك؟
هناك العديد من منتجات قائمة انتظار رسائل JMS الناضجة في السوق ، ولكن بناءً على بنية المشروع الحالية وحالة النشر ، فإننا نستخدم Redis كطاقة انتظار للرسائل.
لماذا تستخدم redis؟
تحتوي بنية بيانات القائمة في Redis على خصائص "قوائم الانتظار المزدوجة" ، ويتمتع Redis بالقدرة على استمرار البيانات ، لذلك Redis آمن للغاية وموثوق بتنفيذ قوائم الانتظار الموزعة.
يشبه "قائمة الانتظار" في JMS ، باستثناء أن الوظائف والموثوقية (المعاملات) ليست صارمة مثل JMS. يتمتع Redis نفسها بأداء عالي وتصميم موزع "مريح" (النسخ المتماثلة ، Sharding) ، والتي يمكن أن توفر أساسًا جيدًا لتنفيذ "قوائم الانتظار الموزعة".
جانب المزود
يستخدم المشروع مكونًا إضافيًا لـ RediS Redis Plugin-Data-Data-Redis. إذا لم تكن متأكدًا من كيفية استخدامه ، فيرجى Google أو Baidu.
redis.properties:
#Redis Configuration Center Redis.host = 192.168.1.180redis.port = 6379redis.password = 123456redis.maxidle = 100 redis.MaxActive = 300 redis.maxwait = 1000 redis.testonborrow = true timeout = 100000
تكوين redis:
<!-تكوين redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <property name = "hostname" value = "$ {redis.host}" /> <property name = "port" value = "$ {{propert value = "$ {redis.timeout}" /> <property name = "poolconfig" ref = "jedispoolconfig" /> <property name = "usepool" value = "true" /> </bean> <bean id = "redistemplate"> <property name = "connectionfactory" تكوين السجل المقطعي (الرمز الكاذب):
/*** سجل النظام ، فئة معالجة الوجه* Creator Xiaoqi 2012* وقت الخلق 15 يناير 2018*/@component@scope@sidepublic class syslogaspect {autowired private redistemplate <string ، string> redistemplate ؛ // تعتمد التعليقات التوضيحية على Swagger API ، ويمكنك أيضًا تحديد @pointcut (" @enrotation (io.swagger.annotations.apioperation)") public void logpointcut () {} @around ("logpointcut ()") كائن عام حول (proseingjoinpoint point) throws {object sterd =) // اكتب رسائل السجل إلى قناة itsstyle_log redistemplate.convertandsend ("ItStyle_Log" ، "بيانات السجل ، معالجةها بنفسك") ؛ نتيجة العودة }}جانب المستهلك
تكوين redis:
<!-تكوين redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <property name = "hostname" value = "$ {redis.host}" /> <property name = "port" value = "$ {{propert value = "$ {redis.timeout}" /> <property name = "poolconfig" ref = "jedispoolconfig" /> <property name = "usepool" value = "true" /> </bean> name = "hashKeySerializer"> <bean/> </spertifice> </bean> <!-الاستماع إلى فئة التنفيذ-> <bean id = "المستمع"/> <bean id = "stringredisserializer"/> <redis: المستمع-container connection-factory = "jedisconnectionfactory"> <! <redis: مستمع ref = "مستمع" serializer = "stringredisserializer" method = "handlelog" topic = "iTStyle_Log"/> </redis: المستمع-container>واجهة الاستماع:
الواجهة العامة messagedelegatelistener {public void handlelog (رسالة مسلسل) ؛}تنفيذ الاستماع:
الطبقة العامة messagedelegatelistenerimpl تنفذ messagedelegatelistener {Override public void handlelog (message serializable) {if (message == null) {system.out.println ("null") ؛ } آخر {// معالجة بيانات سجل}}}سؤال وجواب
【السؤال 1】 لماذا استخدام redis؟
في الواقع ، هناك بالفعل تفسيرات أعلاه ، على الرغم من وجود العديد من المنتجات المستقرة للغاية في السوق ، مثل Kafka و RabbitMQ و RocketMQ التي قد تفكر فيها. ومع ذلك ، نظرًا لأن المشروع نفسه يستخدم Redis كذاكرة التخزين المؤقت الموزعة ، يتم تحديد Redis استنادًا إلى مبدأ توفير المشاكل والجدوى.
[السؤال 2] كيفية تخزين بيانات السجل؟
من حيث المبدأ ، لا ينصح بتخزينه في قواعد البيانات العلائقية ، مثل MySQL. بعد كل شيء ، فإن عدد السجلات التي تم إنشاؤها ضخمة ، لذلك يوصى بتخزينها في قواعد بيانات غير علمية مثل Elasticsearch.
[السؤال 3] كيف يتم تنفيذ جمع سجلات المقطعين؟
يحتاج سجل القسم إلى تقديم حزم جرة ذات صلة بالحيوانات ، والتكوين يجعل Spring يعتمد وكيل CGLIB.
رمز مصدر المشروع مفتوح المصدر (مرجع): https://gitee.com/52itstyle/spring-oot-mail
لخص
ما سبق هو قائمة انتظار السجل الموزعة Redis لهندسة مشروع Javaweb التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!