Introduction à RabbitMQ:
MQ est le nom complet de la file d'attente de messages. La file d'attente de messages (MQ) est une méthode de communication entre les applications et les applications. Les applications communiquent en lisant et en écrivant des messages en file d'attente (données pour les applications) sans connexion dédiée pour les lier. La livraison de messages fait référence à la communication entre les programmes en envoyant des données dans des messages, plutôt qu'en s'appelant directement, les appels directs sont généralement utilisés dans des techniques telles que les appels de procédure distante. La file d'attente se réfère à l'application communiquant par le biais d'une file d'attente. L'utilisation de files d'attente élimine l'exigence selon laquelle la demande de réception et d'envoi exécute simultanément. Parmi eux, les produits MQ plus matures sont IBM WebSphere MQ.
Le contenu de cette section est que lorsqu'un utilisateur enregistre, l'adresse e-mail est d'abord stockée dans la file d'attente RabbitMQ, puis retournée à l'utilisateur pour une inscription réussie; Ensuite, le récepteur de la file d'attente de messages obtient le message de la file d'attente et envoie un e-mail à l'utilisateur.
1. Introduction à Rabbitmq
Si vous ne connaissez pas Rabbitmq auparavant, il est recommandé de jeter un œil à Rabbitmq rapidement (manuel rapide).
1. Installation de RabbitMQ sur Mac.
2. Une brève introduction à Rabbitmq.
Producteur: responsable de l'envoi de messages à l'échange.
Échange: Selon certaines politiques, il est responsable du stockage des messages dans la file d'attente spécifiée.
File: responsable de l'enregistrement des messages.
Consommateur: responsable de l'extraction de messages de la file d'attente.
Liaison: responsable de la cartographie de l'association des échanges et des files d'attente. L'échange et la file d'attente sont des relations multiples à plusieurs.
2. Implémentation de Rabbitmq au printemps
1. Introduire des packages de dépendance.
<dependency> <proupId> org.springframework.amqp </proupId> <ArtifActid> printemps-amqp </ artifactid> <version> 1.6.0.release </DERNIFRIENT> </DENFENCE> <Dedency> <ProupID> org.springFramework.Amqp </proupId> <ArtifActid> Spring-Rabbit </tifactId> <version> 1.6.0.release </ version> </Dependance>
2. Fichier de configuration Rabbitmq.
<? xml version = "1.0" Encoding = "utf-8"?> <Beans: Beans xmlns = "http://www.springframework.org/schema/rabbit" xmlns: beans = "http://www.springframework.org/schema/bans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/ribbit/spring/www.xsschest http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <! - 1. Configurez l'usine de connexion. Si vous ne configurez pas l'hôte, le port, le nom d'utilisateur, le mot de passe, alors localhost: 5672, invité / invité -> <! - <connection-factory id = "connectionFactory" /> -> <connection-factory id = "connectionFactory" host = "localhost" port = "5672" username = "everseeker" passway = "333" /> <! - 2. Configurez les files d'attente, l'échange et la liaison qui les combinent ensemble -> <! - Dans la file d'attente et l'échange, il y a un attribut important durable, qui par défaut est vrai, ce qui peut empêcher la perte de données après le temps d'arrêt. -> <! - Dans l'auditeur-container, il y a un attribut de reconnaissance, qui est par défaut automatique, c'est-à-dire que le consommateur doit avoir une réponse après avoir réussi à traiter le message. Si le programme des consommateurs rencontre une exception ou des plantages, le message sera re-placé à la file d'attente -> <admin Connection-Factory = "ConnectionFactory" /> <queue id = "UserArnerMailQueue" Name = "user.alert.email" Dururable = "true" /> <queue id = "UserArnerCellleeue" name = "user.Alerts.Cell. <! - Il existe 4 types d'échange AMQP standard: direct, sujet, en-têtes, fanout, choisissez selon les besoins réels. -> <! - Direct: Si la clé de routage du message correspond directement à la clé de routage du bingding, le message sera acheminé vers la file d'attente. -> <! - Sujet: Si la clé de routage du message correspond à la clé de routage du bingding, le message sera acheminé vers la file d'attente. -> <! - En-têtes: Si les informations et les valeurs de l'en-tête dans la table des paramètres de message correspondent à la table des paramètres de liaison, le message sera acheminé vers la file d'attente. -> <! - Fanout: Quelle que soit la clé de routage du message et l'en-tête / valeur de la table des paramètres, le message sera acheminé vers la file d'attente. --> <direct-exchange name="user.alert.email.exchange" durable="true"> <bindings> <binding queue="user.alerts.email" /> <!--The default routing key is the same as the queue's name--> </bindings> </direct-exchange> <direct-exchange name="user.alert.cellphone.exchange"> <bindings> <binding queue = "User.Alerts.Cellphone" /> </ Bindings> </ Direct-Exchange> <! - 3. Configurez RabbitTemplate pour envoyer des messages -> <template id = "RabbitTemplate" Connection-Factory = "ConnectionFactory" /> <! - 4. Configurez le conteneur d'écouteur et l'écouteur pour recevoir des messages -> <Beans: Bean Id = "UserListener" /> <écouteur-container Connection-Factory = "ConnectionFactory" remerciled = "Auto"> <écouteur Ref = "UserListener" Méthode = "HandleUserArtToEmail" Queues = "UserAnerTelertToCon que les queues = "UserArtCellPhoneQueue" /> </ auditeur-container> </ Beans: Beans>
Si vous configurez la connexion-facteur et utilisez le mot de passe du compte invité / invité par défaut, org.springframework.amqp.amqpauthenticationException: com.rabbitmq.client.authenticationfailureException: Access_refused - la connexion a été refusée à l'aide du mécanisme d'authentification Plain. Pour plus de détails, consultez le courtier en journal. La solution consiste à créer un nouvel utilisateur avec des privilèges d'administrateur et à permettre l'accès à l'hôte virtuel.
Les étapes sont les suivantes:
1. Ouvrir http: // localhost: 15672 /
2. Admin -> utilisateurs, créez un nouvel utilisateur, autorisation d'administrateur.
3. Hôtes virtuels, définissez les nouveaux utilisateurs pour autoriser l'accès.
3. Le producteur envoie un message à l'échange.
@Service ("UserArserService") classe publique UserArserServiceImpl implémente UserArserService {private lapinmplate lapin; @Autowired public UserArserServiceImpl (lapin lapin) {this.rabbit = lapin; } public void SendUsererArtToEmail (utilisateur utilisateur) {// convertandSend (String Exchange, String RoutingKey, objet objet), encapsuler l'objet objet en un objet de message et l'envoyer pour échanger lapin.convertandSend ("user.alert.email.exchange", "user.aler.convertandsend", user); }} 4. Configurer les consommateurs pour recevoir des messages.
classe publique UserArThandler {public void HandleUserArsertToEmail (utilisateur utilisateur) {System.out.println (utilisateur);} 3. Envoyez des e-mails via javax.mail
1. Introduire des packages de dépendance.
<dependency> <groupId> javax.mail </prouprid> <letifactive> mail </etefactId> <in version> 1.4.7 </ version> </Dependency>
2. Configurer les informations du serveur de messagerie.
@BeanPublic MailSender MailSender (Environment Env) {JavamailSenderImpl MailSender = new JavamailSenderImpl (); // S'il s'agit d'une boîte aux lettres normale, d'une authentification non-SSL, etc., comme 163 MailBox MailSender.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"); // Si le serveur de messagerie adopte l'authentification SSL, ajoutez les configurations suivantes, telles que la boîte aux lettres Gmail, les propriétés de boîte aux lettres QQ PROPS = NOUVELLES PROPRIÉTIES (); 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 (accessoires); return MailSender;} 3. Envoyez un e-mail.
@Component ("UserMailService") classe publique UserMailServiceImpl implémente UserMailService {private MailSender MailSender; @Autowired public UserMailServiceImpl (MailSender MailSender) {this.mailSender = MailSender; } public void SendSimpleUserMail (String to, utilisateur utilisateur) {SimpleMailMessage Message = new SimpleMailMessage (); message.setFrom ("[email protected]"); message.setTo (à); Message.SetSubject (user.getUserName () + "Confirmation de message"); Message.SeTText (user.toString ()); MailSender.Send (message); }} 4. Le consommateur peut appeler la méthode des e-mails d'envoi.
1. Références: Pratique pratique du printemps (4e édition).
2. Le code complet est dans GitHub, adresse: https://github.com/everseeker0307/register.
Ce qui précède est la file d'attente de messages (RabbitMQ) Envoi de la fonction de messagerie de Spring Learning Notes 3 vous présenté. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!