สรุป:
สถาปัตยกรรมกระจายคิวล็อกและชื่อตัวเองเป็นฟังก์ชั่นการรวบรวมบันทึก แต่มีการเพิ่ม Redis ตรงกลางเพื่อสร้างคิวข้อความ ทำไมฉันต้องคิวข้อความ? เมื่อปัจจัยต่าง ๆ เช่น "การผลิต" และ "การบริโภค" ปรากฏในระบบไม่สอดคล้องกันต้องใช้คิวข้อความเพื่อทำหน้าที่เป็นชั้นนามธรรมเพื่อเชื่อมความแตกต่างระหว่างทั้งสองฝ่าย
สถาปัตยกรรมกระจายคิวล็อกและชื่อตัวเองเป็นฟังก์ชั่นการรวบรวมบันทึก แต่มีการเพิ่ม Redis ตรงกลางเพื่อสร้างคิวข้อความ
ทำไมฉันต้องคิวข้อความ?
เมื่อปัจจัยต่าง ๆ เช่น "การผลิต" และ "การบริโภค" ปรากฏในระบบไม่สอดคล้องกันต้องใช้คิวข้อความเพื่อทำหน้าที่เป็นชั้นนามธรรมเพื่อเชื่อมความแตกต่างระหว่างทั้งสองฝ่าย
ตัวอย่างเช่นอีเมลทั่วไปและ SMS ที่ส่งในระบบของเราเขียนฟังก์ชั่นเหล่านี้ซึ่งไม่ต้องการการตอบสนองต่อคิวการร้องขอกระบวนการแบบอะซิงโครนัสและลดเวลาตอบสนอง
จะบรรลุได้อย่างไร?
มีผลิตภัณฑ์มิดเดิลแวร์คิวข้อความ JMS ที่เป็นผู้ใหญ่จำนวนมากในตลาด แต่ขึ้นอยู่กับสถาปัตยกรรมโครงการและสถานการณ์การปรับใช้ปัจจุบันเราใช้ Redis เป็นคิวข้อความ
ทำไมต้องใช้ Redis?
โครงสร้างข้อมูลรายการใน Redis มีลักษณะของ "คิวสองปลาย" และ Redis มีความสามารถในการคงอยู่ข้อมูลดังนั้น Redis จึงปลอดภัยและเชื่อถือได้มากในการใช้คิวแบบกระจาย
มันคล้ายกับ "คิว" ใน JMS ยกเว้นว่าฟังก์ชั่นและความน่าเชื่อถือ (การทำธุรกรรม) ไม่เข้มงวดเท่ากับ JMS Redis เองมีประสิทธิภาพสูงและการออกแบบแบบกระจาย "สะดวก" (แบบจำลอง, Sharding) ซึ่งสามารถให้รากฐานที่ดีสำหรับการใช้ "คิวแบบกระจาย"
ด้านผู้ให้บริการ
โครงการใช้ปลั๊กอิน Redis ของบุคคลที่สามสปริง-เรดดิส หากคุณไม่แน่ใจว่าจะใช้งานได้อย่างไรโปรด Google หรือ Baidu
Redis.properties:
#REDIS CENTERION CENTER REDIS.HOST = 192.168.1.180Redis.port = 6379Redis.Password = 123456Redis.maxidle = 100 redis.maxactive = 300 redis.maxwait = 1,000 redis.testonborrow = True Redis.timeOut = 100000
การกำหนดค่า Redis:
<!-การกำหนดค่า redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <property name = "HostName" value = "$ {redis.host}" /> <property name = "พอร์ต" value = "$ {redis.port}" name = "timeout" value = "$ {redis.timeout}" /> <property name = "poolconfig" ref = "jedispoolconfig" /> <property name = "usepool" value = "true" /> </epean> <bean id = การกำหนดค่าบันทึกส่วน (pseudocode):
/*** บันทึกระบบ, คลาสการประมวลผล Facet* ผู้สร้าง Xiaoqi 2012* เวลาการสร้าง 15 มกราคม 2018*/@component@scope@spope@spope@spope@spopepublic คลาส syslogaspect {@autowired ส่วนตัว redistemplate <สตริงสตริง> redistemplate; // คำอธิบายประกอบขึ้นอยู่กับ Swagger API และคุณยังสามารถกำหนด @pointcut (" @annotation (io.swagger.annotations.apioperation)") โมฆะสาธารณะ logpointcut () {} @around ("logpointcut ()") วัตถุสาธารณะรอบ ๆ // เขียนข้อความบันทึกไปยัง itsstyle_log channel redistemplate.convertandsend ("itstyle_log", "ข้อมูลบันทึกประมวลผลด้วยตัวเอง"); ผลการกลับมา; -ด้านผู้บริโภค
การกำหนดค่า Redis:
<!-การกำหนดค่า redis-> <bean id = "jedispoolconfig" /> <bean id = "jedisconnectionfactory"> <property name = "HostName" value = "$ {redis.host}" /> <property name = "พอร์ต" value = "$ {redis.port}" name = "timeout" value = "$ {redis.timeout}" /> <property name = "poolconfig" ref = "jedispoolconfig" /> <property name = "usepool" value = "true" /> </epean> </perty> <property name = "hashkeyserializer"> <bean/> </property> </ebean> <!-การฟังคลาสการใช้งาน-> <bean id = "ผู้ฟัง"/> <bean id = "stringredisserializer" ในการสมัครสมาชิก-> <redis: listener ref = "Listener" serializer = "stringredisserializer" method = "handlelog" topic = "itstyle_log"/> </disการฟังอินเทอร์เฟซ:
อินเทอร์เฟซสาธารณะ MessageDeleGatelistener {โมฆะสาธารณะ handlelog (ข้อความ serializable);}การใช้งานการฟัง:
คลาสสาธารณะ MessageGeleGatelistenerImpl ใช้ MessageGeleGatelistener {@Override โมฆะสาธารณะ handlelog (ข้อความ serializable) {ถ้า (ข้อความ == null) {system.out.println ("null"); } else {// ข้อมูลการบันทึกกระบวนการ}}}}ถาม - ตอบ
【คำถาม 1 】ทำไมต้องใช้ Redis?
ที่จริงแล้วมีคำอธิบายข้างต้นแล้วแม้ว่าจะมีผลิตภัณฑ์ที่มีเสถียรภาพมากมายในตลาดเช่น Kafka, RabbitMQ และ RocketMQ ที่คุณอาจนึกถึง อย่างไรก็ตามเนื่องจากโครงการใช้ Redis เป็นแคชแบบกระจาย Redis จึงถูกเลือกตามหลักการของการประหยัดปัญหาและความเป็นไปได้
[คำถามที่ 2] วิธีจัดเก็บข้อมูลบันทึก?
โดยหลักการแล้วไม่แนะนำให้เก็บไว้ในฐานข้อมูลเชิงสัมพันธ์เช่น MySQL ท้ายที่สุดจำนวนบันทึกที่สร้างขึ้นนั้นมีขนาดใหญ่มากดังนั้นจึงแนะนำให้จัดเก็บไว้ในฐานข้อมูลที่ไม่เกี่ยวข้องเช่น Elasticsearch
[คำถามที่ 3] การรวบรวมบันทึกส่วนหนึ่งมีการใช้งานอย่างไร?
บันทึกส่วนจำเป็นต้องแนะนำแพ็คเกจ JAR ที่เกี่ยวข้องกับฤดูใบไม้ผลิและการกำหนดค่าทำให้สปริงใช้พร็อกซี CGLIB
ซอร์สโค้ดโครงการโอเพ่นซอร์ส (อ้างอิง): https://gitee.com/52itstyle/spring-boot-mail
สรุป
ข้างต้นคือคิวบันทึกการกระจายของ Redis สำหรับสถาปัตยกรรมโครงการ Javaweb ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!