บทนำสู่ RabbitMQ:
MQ เป็นชื่อเต็มของคิวข้อความ คิวข้อความ (MQ) เป็นวิธีการสื่อสารระหว่างแอปพลิเคชันและแอปพลิเคชัน แอปพลิเคชันสื่อสารโดยการอ่านและเขียนข้อความที่รอคิว (ข้อมูลสำหรับแอปพลิเคชัน) โดยไม่ต้องเชื่อมต่อโดยเฉพาะเพื่อเชื่อมโยงพวกเขา การส่งข้อความหมายถึงการสื่อสารระหว่างโปรแกรมโดยการส่งข้อมูลในข้อความแทนที่จะโทรติดต่อกันโดยตรงมักจะใช้การโทรโดยตรงโดยตรงในเทคนิคเช่นการโทรขั้นตอนระยะไกล การเข้าคิวหมายถึงแอปพลิเคชันที่สื่อสารผ่านคิว การใช้คิวช่วยลดข้อกำหนดที่ทั้งการรับและการส่งแอปพลิเคชันดำเนินการพร้อมกัน ในหมู่พวกเขาผลิตภัณฑ์ MQ ที่เป็นผู้ใหญ่มากขึ้นคือ IBM WebSphere MQ
เนื้อหาของส่วนนี้คือเมื่อผู้ใช้ลงทะเบียนที่อยู่อีเมลจะถูกเก็บไว้เป็นครั้งแรกในคิว RabbitMQ จากนั้นกลับไปยังผู้ใช้เพื่อลงทะเบียนที่ประสบความสำเร็จ จากนั้นตัวรับสัญญาณของคิวข้อความจะได้รับข้อความจากคิวและส่งอีเมลไปยังผู้ใช้
1. บทนำสู่ RabbitMQ
หากคุณไม่ทราบเกี่ยวกับ RabbitMQ มาก่อนขอแนะนำให้ดูที่ RabbitMQ Quick (คู่มือด่วน)
1. การติดตั้ง RabbitMQ บน Mac
2. การแนะนำสั้น ๆ เกี่ยวกับ RabbitMQ
ผู้ผลิต: รับผิดชอบในการส่งข้อความเพื่อแลกเปลี่ยน
Exchange: ตามนโยบายบางอย่างมันมีหน้าที่จัดเก็บข้อความไว้ในคิวที่ระบุ
คิว: รับผิดชอบในการบันทึกข้อความ
ผู้บริโภค: รับผิดชอบในการแยกข้อความจากคิว
การผูกมัด: รับผิดชอบการแมปสมาคมของการแลกเปลี่ยนและคิว การแลกเปลี่ยนและคิวเป็นความสัมพันธ์หลายต่อหลายคน
2. การใช้ RabbitMQ ในฤดูใบไม้ผลิ
1. แนะนำแพ็คเกจการพึ่งพา
<การพึ่งพา> <roupId> org.springframework.amqp </groupid> <ratifactid> Spring-Amqp </artifactid> <sersion> 1.6.0.release </version> </predency> <Sersion> 1.6.0.Release </เวอร์ชัน> </predency>
2. ไฟล์การกำหนดค่า RabbitMQ
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <ถั่ว: ถั่ว xmlns = "http://www.springframework.org/schema/rabbit" xmlns: beans = "http://www.springframeworkelf xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-1 กำหนดค่าโรงงานเชื่อมต่อ หากคุณไม่ได้กำหนดค่าโฮสต์, พอร์ต, ชื่อผู้ใช้, รหัสผ่าน, localhost: 5672, แขก /แขก-> <!-<การเชื่อมต่อ-factory id = "connectionFactory" />-> <connection-factory id = "connectionFactory" host = "localhost" พอร์ต = "5672" username = "Everseeker" กำหนดค่าคิวคิวการแลกเปลี่ยนและการเชื่อมโยงที่รวมเข้าด้วยกัน-> <!-ในคิวและการแลกเปลี่ยนมีแอตทริบิวต์สำคัญที่ทนทานซึ่งค่าเริ่มต้นเป็นจริงซึ่งสามารถป้องกันการสูญเสียข้อมูลหลังการหยุดทำงาน -> <!-ใน Listener-Container มีแอตทริบิวต์รับทราบซึ่งผิดนัดเป็นอัตโนมัตินั่นคือผู้บริโภคจะต้องตอบกลับหลังจากประมวลผลข้อความสำเร็จ หากโปรแกรมผู้บริโภคพบข้อยกเว้นหรือล่มข้อความจะถูกวางกลับไปที่คิว-> <การเชื่อมต่อกับผู้ดูแลระบบ = "connectionFactory" /> <queue id = "useralerTemailqueue" name = "user.alerts.email" durual = "true" /> <!-มีการแลกเปลี่ยนมาตรฐาน AMQP 4 ประเภท: โดยตรง, หัวข้อ, ส่วนหัว, fanout, เลือกตามความต้องการที่แท้จริง -> <!-โดยตรง: หากคีย์การกำหนดเส้นทางของข้อความตรงกับคีย์การกำหนดเส้นทางโดยตรงข้อความจะถูกส่งไปยังคิว -> <!-หัวข้อ: หากคีย์การกำหนดเส้นทางของข้อความตรงกับคีย์การกำหนดเส้นทางของการ bingding ข้อความจะถูกส่งไปยังคิว -> <!-ส่วนหัว: หากข้อมูลส่วนหัวและค่าในตารางพารามิเตอร์ข้อความตรงกับตารางพารามิเตอร์การเชื่อมโยงข้อความจะถูกส่งไปยังคิว -> <!-Fanout: ไม่ว่าคีย์การกำหนดเส้นทางของข้อความและส่วนหัว/ค่าของตารางพารามิเตอร์คืออะไรข้อความจะถูกส่งไปยังคิว -> <direct-exchange name = "user.alert.email.exChange" durable = "true"> <การรวม> <การเชื่อมโยง queue = "user.alerts.email"/> <!-คีย์การกำหนดเส้นทางเริ่มต้นเท่ากับชื่อคิว-> queue = "user.alerts.cellphone"/> </bindings> </direct-exchange> <!-3 กำหนดค่า Rabbittemplate เพื่อส่งข้อความ-> <template id = "Rabbittemplate" Connection-factory = "ConnectionFactory" /> <!-4 กำหนดค่าคอนเทนเนอร์ผู้ฟังและผู้ฟังเพื่อรับข้อความ-> <ถั่ว: ถั่ว id = "userlistener" /> <ผู้ฟังการเชื่อมต่อการเชื่อมต่อ-factory = "connectionFactory" ACKNOWLEDGE = "Auto"> <Listener Ref = "userListener" userListener "userListenere method = "handleuseralertTocellphone" queues = "UseralerTcellphonequeue"/> </listener-container> </epe: beans> beans>
หากคุณกำหนดค่าการเชื่อมต่อ - แฟคเตอร์และใช้รหัสผ่านบัญชีแขก/เกสต์เริ่มต้น org.springframework.amqp.amqpauthenticationexception: com.rabbitmq.client.authenticationfailureexception: access_refused - การเข้าสู่ระบบถูกปฏิเสธโดยใช้กลไกการรับรองความถูกต้อง สำหรับรายละเอียดโปรดดูโบรกเกอร์ล็อกไฟล์ โซลูชันคือการสร้างผู้ใช้ใหม่ที่มีสิทธิ์ผู้ดูแลระบบและอนุญาตให้เข้าถึงโฮสต์เสมือนจริง
ขั้นตอนมีดังนี้:
1. เปิด http: // localhost: 15672/
2. ผู้ดูแลระบบ -> ผู้ใช้สร้างผู้ใช้ใหม่สิทธิ์ของผู้ดูแลระบบ
3. โฮสต์เสมือนตั้งค่าผู้ใช้ใหม่เพื่ออนุญาตการเข้าถึง
3. ผู้ผลิตส่งข้อความเพื่อแลกเปลี่ยน
@Service ("UseralerTservice") ชั้นเรียนสาธารณะ UseralerTserviceImpl ใช้ UseralerTservice {กระต่าย Rabbittemplate ส่วนตัว; @autowired Public UseralertServiceImpl (Rabbittemplate Rabbit) {this.rabbit = Rabbit; } โมฆะสาธารณะ SenduseralerTtoEmail (ผู้ใช้ผู้ใช้) {// ConvertandSend (การแลกเปลี่ยนสตริง, สตริงเส้นทางการกำหนดเส้นทางวัตถุวัตถุ), ห่อหุ้มวัตถุวัตถุลงในวัตถุข้อความและส่งไปยังแลกเปลี่ยน Rabbit.ConvertandSend ("user.alert.email.exChange", "user.alerts.email", ผู้ใช้); - 4. กำหนดค่าผู้บริโภคให้รับข้อความ
ชั้นเรียนสาธารณะ UseralerThandler {โมฆะสาธารณะที่จับต้องได้รับ (ผู้ใช้ผู้ใช้) {System.out.println (ผู้ใช้);} 3. ส่งอีเมลผ่าน Javax.mail
1. แนะนำแพ็คเกจการพึ่งพา
<Ederency> <sdeperency> javax.mail </groupId> <ratifactid> Mail </artifactId> <version> 1.4.7 </Serve> </erperency>
2. กำหนดค่าข้อมูลเซิร์ฟเวอร์เมล
@BeanPublic MailSender MailSender (Environment Env) {JavamailSenderImpl Mailsender = JavamailsenderImpl ใหม่ (); // ถ้าเป็นกล่องจดหมายปกติการตรวจสอบสิทธิ์ที่ไม่ใช่ SSL ฯลฯ เช่นกล่องจดหมาย 163 กล่องจดหมาย Sethost (env.getProperty ("Mailserver.host")); mailsender.setport (integer.parseint (env.getProperty ("mailserver.port"))); mailsender.setUserName (env.getProperty ("mailserver.username")); mailsender.setPassword (env.getProperty ("mailserver.password")); mailsender.setDefaultEncoding ("UTF-8"); // หากเซิร์ฟเวอร์เมลใช้การรับรองความถูกต้องของ SSL ให้เพิ่มการกำหนดค่าต่อไปนี้เช่นกล่องจดหมาย Gmail, Properties Properties ของ QQ MAISTIES = PROPERTIES ใหม่ (); props.put ("mail.smtp.auth", "true"); props.put ("mail.smtp.starttls.enable", "true"); props.put ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); props.put ("mail.smtp.socketfactory.port", "465"); mailsender.setJavamailProperties (อุปกรณ์ประกอบฉาก); ส่งคืน Mailsender;} 3. ส่งอีเมล
@Component ("USERMAILSERVICE") ชั้นเรียนสาธารณะ USERMAILSERVICEIMPL ใช้ USERMAILSERVICE {MailSender MailSender ส่วนตัว @autowired สาธารณะ usermailserviceimpl (Mailsender Mailsender) {this.mailsender = mailsender; } โมฆะสาธารณะ SendSimpleUserMail (String to, ผู้ใช้ผู้ใช้) {SimpleMailMessage Message = New SimpleMailMessage (); message.setFrom ("[email protected]"); message.setto (ถึง); message.setSubject (user.getUserName () + "การยืนยันข้อความ"); message.settext (user.toString ()); Mailsender.Send (ข้อความ); - 4. ผู้บริโภคสามารถโทรหาวิธีการส่งอีเมล
1. ข้อมูลอ้างอิง: การปฏิบัติในทางปฏิบัติของฤดูใบไม้ผลิ (ฉบับที่ 4)
2. รหัสที่สมบูรณ์อยู่ใน GitHub ที่อยู่: https://github.com/everseeker0307/register
ข้างต้นคือคิวข้อความ (RabbitMQ) การส่งฟังก์ชั่นอีเมลของหมายเหตุการเรียนรู้ฤดูใบไม้ผลิ 3 แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!