【Spring整合】-Spring使用JMS傳送訊息
1.JMS簡介:
Java 訊息服務( Java Message Service , JMS )是一個 Java 標準,定義了使用訊息代理的通用API 。在 JMS 出現之前,每個訊息代理都有私有的 API ,這就使得不同代理之間的訊息程式碼很難通用。但是藉助 JMS ,所有遵從規範的實現都使用通用的介面,這就類似於 JDBC 為資料庫操作提供了通用的介面一樣。Spring 通過基於模板的抽象為 JMS 功能提供了支援,這個模板也就是 JmsTemplate 。使用 JmsTemplate ,能夠非常容易地在訊息生產方傳送佇列和主題訊息,在消費訊息的那一方,也能夠非常容易地接收這些訊息。 Spring 還提供了訊息驅動 POJO 的理念:這是一個簡單的 Java 物件,它能夠以非同步的方式響應佇列或主題上到達的訊息。
二.安裝訊息代理activemq
ActiveMQ 是一個偉大的開源訊息代理產品,也是使用 JMS 進行非同步訊息傳遞的最佳選擇。在開始使用 ActiveMQ 之前,我們需要從 http://activemq.apache.org 下載二進位制發行包。下載完 ActiveMQ 後,我們將其解壓縮到本地硬碟中。在解壓目錄中,我們會找到檔案 activemq-core-5.9.1.jar 。為了能夠使用 ActiveMQ 的 API ,我們需要將此 JAR 檔案新增到應用程式的類路徑中。安裝完成解壓縮會有下面目錄結構:
執行bin目錄下的activemq.bat出現下面結果表明安裝成功:
三:spring配置JMS
專案目錄結構
第一步:建立實體類
package chapter17.domain; import java.io.Serializable; public class JinNang implements Serializable{ private static final long serialVersionUID = 1L; private String jice;//計策 private String people;//計策實施者 public JinNang(){} public JinNang(String jice,String people){ this.jice=jice; this.people=people; } public String getJice() { return jice; } public void setJice(String jice) { this.jice = jice; } public String getPeople() { return people; } public void setPeople(String people) { this.people = people; } }
第二步:建立service介面和實現類
package chapter17.service.interfaces;
public interface JinNangService {
public abstract void sendJinNang();
}
service實現類:
package chapter17.service;
import org.springframework.jms.core.JmsOperations;
import chapter17.domain.JinNang;
import chapter17.service.interfaces.JinNangService;
public class JinNangServiceImpl implements JinNangService{
JmsOperations jmsOperations;
public JinNangServiceImpl(JmsOperations jmsOperations){
this.jmsOperations=jmsOperations;
}
@Override
public void sendJinNang() {
JinNang jinnang=new JinNang("空城計","諸葛亮");
jmsOperations.convertAndSend(jinnang);
}
}
JinNangServiceImpl有一個JmsOperations屬性,並通過建構函式例項化,JmsTemplate 可以建立連線、獲得會話以及傳送和接收訊息。這使得我們可以專注於構建要傳送的訊息或者處理接收到的訊息。另外, JmsTemplate 可以處理所有丟擲的笨拙的 JMSException 異常。如果在使用 JmsTemplate 時丟擲 JMSException 異常, JmsTemplate 將捕獲該異常,然後丟擲一個非檢查型異常,該異常是 Spring 自帶的 JmsException 異常的子類。
第三步:建立訊息生產者
import org.springframework.context.support.ClassPathXmlApplicationContext;
import chapter17.service.interfaces.JinNangService;
public class JinNangProduce {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("chapter17/messaging.xml");
JinNangService alertService = context.getBean(JinNangService.class);
alertService.sendJinNang();
}
}
生產者通過呼叫JinNangService來發送訊息給訊息代理activemq.
message.xml程式碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.2.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--定義訊息佇列 點對點模型-->
<amq:queue id="jinnangQueue" physicalName="chapter17.queue" />
<!-- 定義訊息主題 對應訂閱釋出模型 -->
<amq:topic id="jinnangTopic" physicalName="chapter17.topic" />
<!-- 連線工廠 連線到activemq訊息代理 -->
<amq:connectionFactory id="connectionFactory"
brokerURL="tcp://localhost:61616" />
<!--定義jmsTemplate spring封裝的jms模板,類似於jdbcTemplate -->
<bean id="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate"
c:_-ref="connectionFactory"
p:defaultDestinationName="chapter17.queue" />
<!-- 定義service實現類 -->
<bean id="jinNangService" class="chapter17.service.JinNangServiceImpl"
c:_-ref="jmsTemplate" />
<!--jms監聽器容器,新增監聽器,當訊息代理返回訊息,觸發監聽器執行相應的程式碼 -->
<jms:listener-container>
<jms:listener destination="chapter17.queue"
ref="jinnangConsumer"
method="getJinnang" />
</jms:listener-container>
<!-- 定義訊息消費者 -->
<bean id="jinnangConsumer" class="chapter17.test.JinNangConsumer" />
</beans>
最後一步:定義訊息消費者:
package chapter17.test;
import chapter17.domain.JinNang;
public class JinNangConsumer {
public void getJinnang(JinNang jinnang){
System.out.println(jinnang.getPeople()+"實施"+jinnang.getJice());
}
}
通過執行訊息生產者JinNangProduce生產一條訊息-傳送一個JinNang物件給訊息代理,jms:listener-container定義了一個監聽器容器,該容器不停的去詢問訊息代理,有訊息給我了沒,如果有,該監聽器容器查詢該訊息佇列對應的監聽器,然後監聽器執行消費者程式碼jinnangConsumer.getJinNang();
相關推薦
【Spring整合】-Spring使用JMS傳送訊息
1.JMS簡介: Java 訊息服務( Java Message Service , JMS )是一個 Java 標準,定義了使用訊息代理的通用API 。在 JMS 出現之前,每個訊息代理都有私有的 API ,這就使得不同代理之間的訊息程式碼很難通用。但是藉助 JMS
【Spring整合】-Spring配置JaxWs
一.JaxWs簡介 JAX-WS規範是一組XML web services的JAVA API,JAX-WS允許開發者可以選擇RPC-oriented或者message-oriented 來實現自己的web services。在 JAX-WS中,一個遠端呼叫可以轉換為一個
【Spring Boot】(23)、Spring Boot整合Mybatis
首先新增mybatis依賴: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</
【Spring Boot】(31)、使用SpringBoot傳送mail郵件
1、前言 傳送郵件應該是網站的必備拓展功能之一,註冊驗證,忘記密碼或者是給使用者傳送營銷資訊。正常我們會用JavaMail相關api來寫傳送郵件的相關程式碼,但現在springboot提供了一套更簡易使用的封裝。 2、Mail依賴 <dependency>
【Spring Boot】(30)、SpringBoot整合RabbitMQ
1、安裝 1.1、Erlang: Erlang下載地址,下載後安裝即可。 1.2、RabbitMQ安裝 RabbitMQ下載地址,下載後安裝即可。 注意:Erlang的版本要與RabbitMQ版本需要匹配才行。 RabbitMQ Mini
【Spring Boot】(29)、SpringBoot整合Mybatis原始碼分析
在【Spring Boot】(23)、Spring Boot整合Mybatis的章節中講述了SpringBoot整合Mybatis的過程,以及一些配置說明,這節主要講解一下整合的原始碼。 廢話不多說,直接進入今天的主題。 閱讀過我之前寫的文章的童靴,肯定知道SpringBoot整合第三方
【Spring Boot】(32)、SpringBoot整合AOP
1、新增pom依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</art
【Spring Boot】--整合Spring Security
目錄 1、建立工程 2、在pom.xml新增spring security的依賴 3、自定義使用者認證邏輯 4、關於使用者物件UserDetails 5、密碼加密解密PasswordEncoder 6、自定義登入介面 7、自定義登入介面 8、自定義處理成功 9
【Spring Boot】--整合RabbitMQ
目錄 0、前言 1、訊息流程 2、新增依賴 3、新增配置 4、新建配置類 5、新建生產者介面 6、新建生產者實現類 7、新建生產者控制器類 8、測試 0、前言 需要已經安裝RabbitMQ,並且啟動、配置好使用者。參考《基於Cen
【框架整合】spring+springmvc+mybatis整合
Spingmvc +mybatis整合 思路 第一步:整合dao層 mybatis和spring整合,通過spirng管理mapper介面。 使用mapper掃描器自動掃描mapper介面在spring中進行註冊。 第二步:整合serv
【spring boot】【elasticsearch】spring boot整合elasticsearch,啟動報錯Caused by: java.lang.IllegalStateException: availableProcessors is already set to [8], reje
spring boot整合elasticsearch, 啟動報錯: Caused by: java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8] at
【框架整合】二、Spring資料來源配置及JdbcTemplate配置
一、匯入必需包 c3p0-0.9.1.2.jar commons-dbcp-1.4.jar commons-pool-1.6.jar mysql-connector-java-5.1.24.jar 二、 建立jdbc.properties jdbc.driverC
【spring系列】- Springmvc整合apache shiro安全框架
shiro: shiro是apache開源的安全框架,可以方便用來處理使用者資訊認證、使用者授權控制、資訊加密等功能,因為其小巧而功能強大在很多SSM架構的web應用系統中被廣泛採用,shiro的架構設計個人覺得結構很清晰,對於想向更高層次發展的開發人員來說,
【Spring+Mybatis】Spring整合Mybatis
在《【Mybatis】Helloworld》(點選開啟連結)大家看到使用Mybatis需要撰寫一個數據庫連線與配置的xml檔案,而Spring具體整合JDBC的功能,具體見《【Spring】整合JDBC連線資料庫》(點選開啟連結),可以代替Mybatis連線資料庫和配置資料
【Spring 系列】1. 搭建和配置Spring與jdbc整合的環境
配置資料來源 <!-- 配置結點,可以使用佔位符 --> <context:property-placeholder location=“classpath:jdbc.properties”/> <bean id="dataSource" class="org.apach
【待解決】ajax傳送http請求後無法通過Spring Boot的modelAndView跳轉
問題:springboot提供的return modelandview可以非常簡便的返回到指定頁面並附帶各種引數。但是使用Ajax傳送請求時,雖然可以到達@requestMapping指示的方法,但是無法通過返回modelAndView的辦法跳轉頁面。。通過查詢資料後得知,這
【框架整合】spring 和mybatis整合&&整合後mybatis原始dao開發
整合思路 需要spring通過單例方式管理SqlSessionFactory。 spring和mybatis整合生成代理物件,使用SqlSessionFactory建立SqlSession。(spring和mybatis整合自動完成) 持久層的mapper都需要由spr
spring整合apache activemq實現訊息傳送的三種方式程式碼配置例項
我們專案中傳送事件告警要用到訊息佇列,所以學習了下activemq,整理如下: activemq的介紹就不用說了,官網上大家可以詳細的看到。 1.下載並安裝activemq:地址http://activemq.apache.org/activemq-590-rel
【Spring-Security】【1】認證和授權
部分 完整 業務 代碼 參數 web 用戶訪問 設置 管理權限 【認證】 憑據為基礎的認證: 當你登錄 e-mail 賬號時,你可能提供你的用戶名和密碼。E-mail的提供商會將你的用戶名與數據中的記錄進行匹配,並驗證你提供的密碼與對應的記錄是不是匹配。這些憑證(用戶名和
【Spring-Security】【2】DelegatingFilterProxy
pat security clas 添加 chain let XML org mapping Spring Security 對我們應用的影響是通過一系列的 ServletRequest 過濾器實現的。 Spring Security 使用了 o.s.web.filter