spring 整合 activeMQ非同步傳送郵件
一、訊息佇列的作用
1、非同步處理
2、流量削峰
3、應用解耦
4、日誌處理
二、此處展示的是非同步處理場景
1、構建maven專案,此處不做多餘的說明了,匯入MQ相關的jar包,注意版本的問題,這裡費了好多時間解決衝突
<!-- MQ start--> //我的spring版本為 4.2.3.RELEASE // 這裡用了mq為 5.11.1的版本,因為5.15以上的版本, 會包含spring的包,導致與spring的包衝突,各種報錯, 浪費了好多時間去查詢整理 <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.11.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.11.1</version> </dependency> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>4.6</version> </dependency> <!-- MQ end-->
2、寫一個處理郵件訊息佇列的處理類
import javax.jms.Destination; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Component; @Component public class EmailProcessor { @Autowired private JmsTemplate jmsTplate; public void sendEmailInfo2Queue(Destination destination, String message){ System.out.println("======= 傳送郵件的請求訊息到訊息佇列======="); jmsTplate.convertAndSend(destination, message); } }
3、實現訊息監聽器
import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; /** * 實現 訊息佇列監聽器,監聽訊息佇列 * 當監聽到佇列中有訊息時,進行訊息消費 * @author Administrator * */ @Component public class DoSendEmail implements MessageListener{ @Autowired private EmailSender emailSender; /** * 監聽的方法實現 */ public void onMessage(Message message) { TextMessage textMsg = (TextMessage)message; try { JSONObject jsonObject = JSON.parseObject(textMsg.getText()); emailSender.sendEmail(jsonObject.getString("email"),jsonObject.getString("code"),jsonObject.getString("username")); } catch (JMSException e) { e.printStackTrace(); } } }
4、實現上面使用到的郵件傳送類,使用javax.mail類
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.stereotype.Component;
@Component
public class EmailSender {
// 傳送者的郵箱
private static final String FROM_EMAIL_ADDR = "xxx";
// 授權碼,即密碼
public static final String FROM_MAIL_PWD = "xxx";
public void sendEmail(String to, String code, String username) {
//1、建立一個程式與郵件伺服器會話物件 Session
Properties prop = new Properties();
prop.setProperty("mail.transport.protocol", "SMTP");
prop.setProperty("mail.smtp.host","smtp.163.com");
prop.setProperty("mail.smtp.port", "25");
// 指定驗證為true
prop.setProperty("mail.smtp.auth", "true");
prop.setProperty("mail.smtp.timeout","1000");
// 驗證賬號及密碼,密碼需要是第三方授權碼
Authenticator authc = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(FROM_EMAIL_ADDR, FROM_MAIL_PWD);
}
};
Session session = Session.getInstance(prop, authc);
// 2、建立messege
Message msg = new MimeMessage(session);
try {
// 設定傳送者郵箱
msg.setFrom(new InternetAddress(FROM_EMAIL_ADDR));
// 設定傳送方式與接收者
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
// 設定主題
msg.setSubject("郵件傳送測試");
// 設定內容
msg.setContent(code, "text/html;charset=utf-8");
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、在使用者登入驗證成功後,加入傳送訊息佇列的程式碼
// 使用者登入後,給使用者傳送郵件,提示使用者登入資訊
//此處程式碼加在驗證使用者成功,返回頁面之前
Destination destination = new ActiveMQQueue("email.queue");
Map<String,String> emailParam = new HashMap<String,String>();
emailParam.put("email","[email protected]");
emailParam.put("code", "ABCDEFG");
emailParam.put("username","FX");
String message = JSON.toJSONString(emailParam);
emailProcessor.sendEmailInfo2Queue(destination,message);
6、配置jms, 本次單獨使用一個spring-jms.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress SpringFacetInspection -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd"
>
<!-- 連線MQ -->
<amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin"/>
<!-- 交給spring管理 -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory"/>
<property name="sessionCacheSize" value="10"/>
</bean>
<!-- JMS模板 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!-- 如果為True,則是Topic;如果是false或者預設,則是queue -->
<property name="pubSubDomain" value="false"/>
</bean>
<!-- JMS監聽器 -->
<jms:listener-container destination-type="queue" connection-factory="connectionFactory">
<!-- 使用doSendEmail物件 監聽 email.queue 的訊息佇列,當有訊息時,進行消費 -->
<jms:listener destination="email.queue" ref="doSendEmail"/>
</jms:listener-container>
</beans>
7、當然要在spring的配置檔案中加入
<import resource="spring-jms.xml"/>
8、啟動專案,登入,可以發現郵箱中已經收到郵件了。
相關推薦
spring 整合 activeMQ非同步傳送郵件
一、訊息佇列的作用 1、非同步處理 2、流量削峰 3、應用解耦 4、日誌處理 二、此處展示的是非同步處理場景 1、構建maven專案,此處不做多餘的說明了,匯入MQ相關的jar包,注意版本的問題,這裡費了好多時間解決衝突 <!-- MQ start--&
ActiveMQ與Spring的整合之非同步傳送電子郵件
1、ActiveMQ與Spring整合,訊息生產方的程式碼 1.1 專案的目錄 1.2 config.properties ## ActiveMQ Config activemq.brokerURL=tcp\://192.168.2.
Spring boot 整合JavaMail服務傳送郵件
JavaMail是SUN提供給廣大Java開發人員的一款郵件傳送和接受的一款開源類庫,支援常用的郵件協議,如:SMTP、POP3、IMAP,開發人員使用JavaMail編寫郵件程式時,不再需要考慮底層的通訊細節如:Socket而是關注在邏輯層面。JavaMail可以傳送各種
spring整合activemq傳送MQ訊息[queue模式]例項
queue型別訊息 pom依賴 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>
spring整合activemq傳送MQ訊息[Topic模式]例項
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc
SpringBoot2.0高階案例(03):整合 JavaMail ,實現非同步傳送郵件
本文原始碼 碼雲地址:知了一笑 https://gitee.com/cicadasmile/middle-ware-parent
Spring整合activeMQ消息隊列
else finally ant try 工具類 cal 創建 ransac cer 1.配置JMS <!-- Spring提供的JMS工具類,它可以進行消息發送、接收等 --> <bean id="jmsTemplate" class=
記錄一次 .Net 框架 Bug 發現和提交過程:SmtpClient一處程式碼編寫錯誤導致非同步傳送郵件時DeliveryFormat配置項無法正確工作
問題已經發到了開發者社群 developercommunity.visualstudio.com/content/pro… 涉及到的Github倉庫: github.com/xiangyuecn/… .Net開發者社群富文字編輯器太難用了,還是簡書的編輯器好用,然後掘金的版面好看,最後還是喜歡cnb
Spring Boot使用JavaMailSender傳送郵件
http://www.cnblogs.com/wxc-xiaohuang/p/9532631.html https://blog.csdn.net/icannotdebug/article/details/79725297 https://docs.spring.io/spring/docs/4.3.21
SPRING 整合 activemq 的 topic 模式
概要 activemq 支援兩種模式: 1.佇列模式 2. 釋出訂閱者模式,topic有一個主題可以有多個訂閱者。這種情況可以將一個訊息,分發到多個消費者。 實現程式碼 1.生產者 import java.util.Map; import javax.annotation.Resour
Spring cloud admin 配置傳送郵件功能
首先引入pox配置 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spr
最新javamail 使用方案,可以非同步傳送郵件
*第一步:工程中新增javamail需要的兩個jar 地址:可以再sun官方網上去下載。 list:mail.jar、activation.jar *第二步:寫發郵件的屬性檔案,本人不喜歡硬編碼的方式coding。 mail.properties檔案如下: mail.tr
Django+Celery非同步傳送郵件
安裝 pip install django==1.11.7 pip install celery 專案目錄 AXF ├── alipay_config │ ├── alipay_rsa_public_key.pem │ └──
springboot 整合 activemq:傳送自定義物件以及失敗訊息重試
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-act
Flask-Mail使用163郵箱非同步傳送郵件
很多型別的應用程式都需要在特定事件發生時提醒使用者,而常用的通訊方法是電子郵件。雖然 Python 標準庫中的 smtplib 包可用在 Flask 程式中傳送電子郵件,但包裝了 smtplib 的Flask-Mail 擴充套件能更好地和 Flask 整合。使用 pip 安裝
spring整合activemq傳遞物件注意事項
初衷:兩個專案分別部署在兩臺伺服器上,專案之間以activemq傳遞object訊息 拓樸結構: 伺服器A:tomcat,專案A--生產者 伺服器B:tomcat、activemq、專案B--消費者 專案A主要程式碼 src/main/resources/ActiveMQ
spring boot 用javaMail傳送郵件,很多坑
直接傳送總是報錯 554 dt:spm 被163攔截,認為非法,抄送一份給自己就解決了。但是顯示抄送人,很煩。 service層 package com.llong.email.mail; import org.springframework.beans.factory.anno
log4j2非同步傳送郵件配置
從高可用性方面考慮,大的平臺通常都會配置錯誤日誌傳送郵件的功能,由於傳送郵件比較慢,同步發郵件會影響使用者體驗,通常會配置成非同步發日誌郵件。網上只有零散的一些文章配置,沒有一個完整的log4j2非同步發郵件的配置說明,下面就詳細說明一下 - log4j2非同步傳送郵件的詳細配置。 1. 環
淺談jms之(通過spring整合activeMQ實現jms)例項
上篇說到使用activemq 實現jms訊息服務 的例項,但是那個是沒有spring進行整合和管理的;其實spring完整提供對jms的支援,所以我們可以通過spring來管理整合activemq 實現jms訊息傳遞服務。 1.建立maven工程(我的專案都是通過maven
flask 非同步傳送郵件
msg = Message('qqq',recipients=['[email protected]']) msg.body = "order" msg.html = 'html' @copy_cur