1. 程式人生 > >【Spring整合】-Spring使用JMS傳送訊息

【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 bootelasticsearchspring 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+MybatisSpring整合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-Security1認證和授權

部分 完整 業務 代碼 參數 web 用戶訪問 設置 管理權限 【認證】 憑據為基礎的認證: 當你登錄 e-mail 賬號時,你可能提供你的用戶名和密碼。E-mail的提供商會將你的用戶名與數據中的記錄進行匹配,並驗證你提供的密碼與對應的記錄是不是匹配。這些憑證(用戶名和

Spring-Security2DelegatingFilterProxy

pat security clas 添加 chain let XML org mapping Spring Security 對我們應用的影響是通過一系列的 ServletRequest 過濾器實現的。 Spring Security 使用了 o.s.web.filter