Introdução ao RabbitMQ:
MQ é o nome completo da fila de mensagens. Fila de mensagens (MQ) é um método de comunicação entre aplicativos e aplicativos. Os aplicativos se comunicam lendo e escrevendo mensagens na fila (dados para aplicativos) sem uma conexão dedicada para vinculá -los. A entrega de mensagens refere -se à comunicação entre os programas enviando dados em mensagens, e não ligando diretamente, as chamadas diretas geralmente são usadas em técnicas como chamadas de procedimento remoto. A fila refere -se ao aplicativo que se comunica através de uma fila. O uso de filas elimina o requisito de que o aplicativo de recebimento e o envio seja executado simultaneamente. Entre eles, os produtos MQ mais maduros são o IBM WebSphere MQ.
O conteúdo desta seção é que, quando um usuário se registra, o endereço de email é armazenado pela primeira vez na fila RabbitMQ e depois retornou ao usuário para o registro bem -sucedido; Em seguida, o receptor da fila de mensagens obtém a mensagem da fila e envia um email para o usuário.
1. Introdução ao RabbitMQ
Se você não conhece o RabbitMQ antes, é recomendável dar uma olhada no RabbitMQ Quick (Rick Manual).
1. Instalação do RabbitMQ no Mac.
2. Uma breve introdução ao RabbitMQ.
Produtor: Responsável por enviar mensagens para trocar.
Troca: De acordo com certas políticas, é responsável por armazenar mensagens na fila especificada.
Fila: responsável por salvar mensagens.
Consumidor: Responsável por extrair mensagens da fila.
Vinculação: responsável pelo mapeamento da associação de troca e filas. Exchange e fila são relacionamentos muitos para muitos.
2. Implementação do RabbitMQ na primavera
1. Introduzir pacotes de dependência.
<Ependency> <PuerpId> org.springframework.amqp </groupiD> <TROTIFACTID> Spring-amqp </ArtifactId> <Versão> 1.6.0.release </sipers> </pendendEncy> <pendesency> <vroupId> org.springframework.amqp </grupo> Artiftid> <Versão> 1.6.0.Release </sipers> </dependency>
2. Arquivo de configuração do RabbitMQ.
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://www.springframework.org/schema/rabbit" xmlns:beans="http://www.springframework.org/schema/beans" 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/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <!-1. Configure a fábrica de conexões. Se você não configurar host, porta, nome de usuário, senha, então localhost: 5672, Guest /Guest-> <!-<Connection-Factory Id = "ConnectionFactory" />-> <Connection-Factory ID = "ConnectionFactory" Host "=" LocalHost "Port =" 5672 "UserName =" Eveseeker "=" 333 "3". Configure filas, troca e ligação que as combina-> <!-Na fila e troca, há um atributo importante durável, que padrão é verdadeiro, o que pode impedir a perda de dados após o tempo de inatividade. -> <!-No ouvinte-contador, há um atributo de reconhecimento, que é inadimplente para automaticamente, ou seja, o consumidor deve ter uma resposta depois de processar com sucesso a mensagem. Se o programa do consumidor encontrar uma exceção ou falhar, a mensagem será re-colocada de volta à fila-> <Admin Connection-Factory = "ConnectionFactory" /> <Queue ID = "UserTerMerMailQueue" name = "userCellPhone.Email" Durable = "True" /> <Queeue id = "userTerTerThELLOMEDUEUUE" Nomeuue "=" True " /> <QueUe id =" userTerTerThELLEue "Nomeuue". Verdadeiro-> <!-Existem 4 tipos de troca AMQP padrão: direto, tópico, cabeçalhos, fanout, escolha de acordo com as necessidades reais. -> <!-Direct: Se a chave de roteamento da mensagem corresponder diretamente à chave de roteamento do Bingding, a mensagem será roteada para a fila. -> <!-Tópico: Se a chave de roteamento da mensagem corresponder à chave de roteamento do Bingding, a mensagem será roteada para a fila. -> <!-cabeçalhos: se as informações e valores do cabeçalho na tabela de parâmetros da mensagem corresponder à tabela de parâmetros de ligação, a mensagem será roteada para a fila. -> <!-Fanout: Não importa qual seja a chave de roteamento da mensagem e o cabeçalho/valor da tabela de parâmetros, a mensagem será roteada para a fila. -> <Direct-Exchange name = "user.alert.email.exchange" durable = "true"> <dindings> <file de ligação = "user.alerts.email"/> <!-a chave de roteamento padrão é a mesma que o nome da fila "Usering>" Usering> " fileue = "user.alerts.cellphone"/> </dindings> </cirtge-Exchange> <!-3. Configure rabbittemplate para enviar mensagens-> <modelo id = "rabbittemplate" conexão-factory = "ConnectionFactory" /> <!-4. Configure o contêiner e o ouvinte do ouvinte para receber mensagens-> <Beans: bean id = "userListener" /> <ouvinte-container Connection-factory = "ConnectionFactory" reconheceu = "auto"> <ouvinte ref = "userListener" Method = "MulhaUsertToEMAil" queus = "useReReMerTeMailue" />> filas = "userRerTCellphoneQueue"/> </ouvinte-container> </ Beans: Beans>
Se você configurar a conexão e usar a senha padrão da conta de convidado/convidado, org.springframework.amqp.amqpauthenticationException: com.rabbitmq.client.authenticationFailureException: access_refused - O login foi recusado usando o mecanismo de autenticação. Para detalhes, consulte o arquivo de log do corretor. A solução é criar um novo usuário com privilégios de administrador e permitir acesso ao host virtual.
As etapas são as seguintes:
1. Aberto http: // localhost: 15672/
2. Admin -> Usuários, crie um novo usuário, permissões de administrador.
3. Hosts virtuais, defina novos usuários para permitir o acesso.
3. O produtor envia uma mensagem para trocar.
@Service ("UserTererService") Classe pública UserTerServiceImpl implementa UserTerService {Private Rabbittemplate Rabbit; @AUTowired Public UserTerServiceImpl (Rabitemplate Rabbit) {this.rabbit = Rabbit; } public void sendUsertalertToEmail (usuário do usuário) {// ConvertandSend (String Exchange, String RoutingKey, objeto objeto), encapsula o objeto do objeto em um objeto de mensagem e envie -o para trocar o rabbit.convertandSend ("user.alert.email.exchange", "user.alerts.email", usuário); }} 4. Configure os consumidores para receber mensagens.
classe pública UserTerThandler {public void handlesertalertToEmail (usuário do usuário) {System.out.println (usuário);} 3. Envie e -mails através de javax.mail
1. Introduzir pacotes de dependência.
<Depencency> <GrupidId> javax.mail </frugiD> <stifactId> Mail </ArtifactId> <versão> 1.4.7 </sipers> </dependency>
2. Configure as informações do servidor de email.
@BeanPublic Mailsender MailSender (Environment Env) {JavamailSenderImpl MailSender = new JavamailSendeImpl (); // se for uma caixa de correio normal, autenticação não-SSL, etc., como 163 Caixa de correio 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"); // Se o servidor de email adotar autenticação SSL, adicione as seguintes configurações, como a caixa de correio Gmail, o QQ Mailbox Properties Props = new Properties (); props.put ("Mail.smtp.auth", "true"); props.put ("Mail.smtp.starttls.enable", "true"); props.put ("Mail.smtp.socketFactory.class", "javax.net.ssl.sssockfactory"); props.put ("Mail.smtp.socketFactory.port", "465"); Mailsender.setJavaMailProperties (Props); Retornar Mailsender;} 3. Envie email.
@Component ("UserMailService") Classe pública UserMailServiceImpl implementa UserMailService {private MailSender MailSender; @AUTowired Public UserMailServiceImpl (MailSender MailSender) {this.mailsender = MailSender; } public void sendsImpleUsermail (string para, usuário do usuário) {SimpleMailMessage message = new SimpleMailMessage (); message.setFrom ("[email protected]"); message.setTo (to); message.SetSubject (user.getUserName () + "confirmação da mensagem"); message.settext (user.toString ()); MailSender.send (mensagem); }} 4. O consumidor pode ligar para o método de email de envio.
1. Referências: prática prática da primavera (4ª edição).
2. O código completo está no github, endereço: https://github.com/everseeker0307/register.
O exposto acima é a fila de mensagens (RabbitMQ), enviando função de email das notas de aprendizado da primavera 3 introduzidas a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!