欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Jms 模塊案例講解

 更新時(shí)間:2025年02月20日 09:45:38   作者:栗箏i  
本文詳細(xì)介紹了Spring-JMS模塊,包括其核心功能和作用,通過(guò)ActiveMQ作為消息代理,提供了一個(gè)基于XML配置的完整示例,幫助開發(fā)者快速掌握Spring-JMS的使用方式,感興趣的朋友一起看看吧

在現(xiàn)代分布式系統(tǒng)中,消息隊(duì)列(Message Queue,MQ)扮演著至關(guān)重要的角色,它不僅能夠解耦系統(tǒng)各個(gè)模塊,還能提升系統(tǒng)的可擴(kuò)展性和可靠性。JMS(Java Message Service)作為 Java EE 規(guī)范中的一部分,為 Java 應(yīng)用提供了一套標(biāo)準(zhǔn)的消息通信 API。然而,JMS 原生 API 相對(duì)復(fù)雜,涉及較多底層操作,而 Spring-JMS 模塊的出現(xiàn)極大地簡(jiǎn)化了 JMS 在 Spring 應(yīng)用中的使用,使得消息的發(fā)送與接收更加直觀且易于維護(hù)。

本篇文章將深入解析 Spring-JMS 模塊,介紹其核心功能,并通過(guò) ActiveMQ 作為消息代理,提供一個(gè) 基于 XML 配置的完整示例,幫助開發(fā)者快速掌握 Spring-JMS 的使用方式。

1、Spring-Jms 模塊介紹

1.1、Spring-Jms 模塊概述

Spring JMS 模塊,是為了簡(jiǎn)化在 Spring 應(yīng)用中使用消息傳遞服務(wù)而設(shè)計(jì)的模塊。它提供了對(duì) JMS(Java Message Service)規(guī)范的支持,使得開發(fā)者能夠方便地發(fā)送和接收消息,與消息代理(如 ActiveMQ、RabbitMQ 等)進(jìn)行交互。

Spring JMS 模塊簡(jiǎn)化了消息生產(chǎn)者和消費(fèi)者端點(diǎn)的配置,同時(shí)也集成了 Spring 的事務(wù)管理機(jī)制,使得消息驅(qū)動(dòng)的架構(gòu)變得更加易于實(shí)現(xiàn)和管理。

1.2、Spring-Jms 模塊依賴

Spring-Tx 模塊的依賴有四個(gè),分別是 Spring-Beans 模塊、Spring-Core 模塊、Spring-Tx 模塊以及 Spring-Messaging 模塊。

其中 Spring Beans 模塊是對(duì) Spring Bean 進(jìn)行定義,實(shí)現(xiàn) IOC 基礎(chǔ)功能的模塊。Spring-Core 是 Spring 中的基礎(chǔ)模塊,它提供了框架運(yùn)行所必需的核心功能。而 Spring Tx 模塊,是 Spring 中處理事務(wù)管理的模塊。

pring Messaging 模塊主要關(guān)注于消息的抽象處理,支持多種消息傳遞協(xié)議,并且特別強(qiáng)化了對(duì)反應(yīng)式編程模型的支持,使得開發(fā)者能更方便地創(chuàng)建高性能、可擴(kuò)展的分布式系統(tǒng)。

1.3、Spring-Jms 模塊作用

Spring-JMS 的核心作用:

  • 簡(jiǎn)化 JMS API 操作:Spring-JMS 提供了一套模板化工具(如 JmsTemplate),封裝了連接、會(huì)話管理等細(xì)節(jié),使得發(fā)送和接收消息更加便捷。
  • 支持消息驅(qū)動(dòng)(Message-Driven):提供 @JmsListener 注解,可以將方法聲明為 JMS 消息監(jiān)聽(tīng)器,接收消息時(shí)自動(dòng)觸發(fā)。
  • 支持事務(wù)管理:與 Spring 的事務(wù)管理集成,支持聲明式事務(wù),確保消息在消費(fèi)時(shí)的 一致性和可靠性。
  • 與 Spring IoC 容器集成:允許使用 Spring 配置管理 JMS 連接工廠(ConnectionFactory)、目的地(Queue/Topic)、消息監(jiān)聽(tīng)容器等組件。
  • 支持消息轉(zhuǎn)換(Message Conversion):提供 MessageConverter 機(jī)制,支持將對(duì)象自動(dòng)轉(zhuǎn)換為 JMS 消息格式(如 JSON、XML)。
  • 支持多種 JMS 提供者: 可與 ActiveMQ、Artemis、RabbitMQ(通過(guò) JMS 兼容接口) 等消息中間件集成。

2、Spring-JMS 案例

本案例演示如何在 Spring目中使用 Spring-JMS 進(jìn)行消息傳遞,基于 ActiveMQ 作為消息代理。

2.1、添加依賴

pom.xml 中添加 Spring-JMS 和 ActiveMQ 相關(guān)依賴:

<dependencies>
    <!-- Spring Core 依賴 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.39</version>
    </dependency>
    <!-- Spring JMS 依賴 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jms</artifactId>
        <version>5.3.39</version>
    </dependency>
    <!-- ActiveMQ 依賴 -->
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-spring-boot-starter</artifactId>
        <version>2.0.1</version>
    </dependency>
    <!-- JMS API 依賴 -->
    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0.1</version>
    </dependency>
</dependencies>

2.2、 配置 Spring XML(spring-jms-config.xml)

使用 XML 配置文件 定義 連接工廠、JmsTemplate、監(jiān)聽(tīng)器 等:

<?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:jms="http://www.springframework.org/schema/jms"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd">
    <!-- 配置 ActiveMQ 連接工廠 -->
    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <constructor-arg value="tcp://localhost:61616"/>  <!-- ActiveMQ 服務(wù)器地址 -->
    </bean>
    <!-- 配置 JMS 模板 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>
    <!-- 配置消息監(jiān)聽(tīng)器容器 -->
    <bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="destinationName" value="test.queue"/>
        <property name="messageListener" ref="messageReceiver"/>
    </bean>
    <!-- 消息消費(fèi)者(監(jiān)聽(tīng)器) -->
    <bean id="messageReceiver" class="com.example.jms.MessageReceiver"/>
</beans>

2.3、創(chuàng)建消息生產(chǎn)者(Producer)

使用 JmsTemplate 發(fā)送消息:

package com.example.jms;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.Queue;
public class MessageSender {
    private JmsTemplate jmsTemplate;
    private Queue queue;
    // 構(gòu)造方法注入
    public MessageSender(JmsTemplate jmsTemplate, Queue queue) {
        this.jmsTemplate = jmsTemplate;
        this.queue = queue;
    }
    public void sendMessage(String message) {
        System.out.println("發(fā)送消息:" + message);
        jmsTemplate.convertAndSend(queue, message);
    }
}

2.4、創(chuàng)建消息消費(fèi)者(Consumer)

實(shí)現(xiàn) MessageListener 接口 來(lái)監(jiān)聽(tīng)消息:

package com.example.jms;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class MessageReceiver implements MessageListener {
    @Override
    public void onMessage(Message message) {
        try {
            if (message instanceof TextMessage) {
                String text = ((TextMessage) message).getText();
                System.out.println("收到消息:" + text);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.5、啟動(dòng) Spring 上下文并發(fā)送消息

package com.example.jms;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import javax.jms.Queue;
public class JmsApp {
    public static void main(String[] args) {
        // 加載 Spring XML 配置
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-jms-config.xml");
        // 獲取 JmsTemplate 和隊(duì)列
        JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate");
        Queue queue = (Queue) context.getBean("testQueue");
        // 發(fā)送消息
        MessageSender sender = new MessageSender(jmsTemplate, queue);
        sender.sendMessage("Hello, Spring-JMS!");
        System.out.println("消息已發(fā)送!");
    }
}

2.6、啟動(dòng) ActiveMQ

確保 ActiveMQ 已啟動(dòng)

activemq start

默認(rèn) Web 控制臺(tái)地址(可查看隊(duì)列消息):

http://localhost:8161/admin

默認(rèn)用戶名/密碼:

admin / admin

2.7、運(yùn)行流程

  • 先啟動(dòng) ActiveMQ 服務(wù)器。
  • 運(yùn)行 JmsApp 發(fā)送消息。
  • MessageReceiver 監(jiān)聽(tīng)到消息并打印到控制臺(tái)。

X、后記

在本篇文章中,我們?cè)敿?xì)介紹了 Spring-JMS 模塊的作用、依賴結(jié)構(gòu)以及如何在非 Spring Boot 環(huán)境下集成 ActiveMQ,實(shí)現(xiàn)消息的發(fā)送與消費(fèi)。通過(guò)使用 Spring-JMS,開發(fā)者可以更加高效地管理消息通信,并與 Spring 生態(tài)系統(tǒng)無(wú)縫集成,如結(jié)合事務(wù)管理、消息轉(zhuǎn)換等特性,進(jìn)一步提升系統(tǒng)的健壯性和可維護(hù)性。

在實(shí)際項(xiàng)目中,我們可以基于 Spring-JMS 結(jié)合其他 MQ 組件(如 RabbitMQ、Kafka)構(gòu)建更加高效的異步消息處理系統(tǒng)。如果你對(duì) Spring 消息驅(qū)動(dòng)架構(gòu) 感興趣,可以進(jìn)一步學(xué)習(xí) Spring Cloud Stream,以便在微服務(wù)架構(gòu)下實(shí)現(xiàn)更加靈活的事件驅(qū)動(dòng)模式。希望本篇文章能夠幫助你更好地理解 Spring-JMS,并在項(xiàng)目中靈活運(yùn)用!

到此這篇關(guān)于 Spring Jms 模塊案例講解的文章就介紹到這了,更多相關(guān)Spring Jms 模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • win10系統(tǒng)64位jdk1.8的下載與安裝教程圖解

    win10系統(tǒng)64位jdk1.8的下載與安裝教程圖解

    這篇文章主要介紹了win10系統(tǒng)64位jdk1.8的下載與安裝教程圖解,本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • IDEA的下載和使用安裝詳細(xì)圖文教程

    IDEA的下載和使用安裝詳細(xì)圖文教程

    這篇文章主要介紹了IDEA的下載和使用安裝,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java 中的volatile關(guān)鍵字

    java 中的volatile關(guān)鍵字

    這篇文章主要介紹了java 中的volatile關(guān)鍵字,volatile在多處理器開發(fā)中保證共享變量的“可見(jiàn)性”。可見(jiàn)性的意思是當(dāng)一個(gè)線程修改一個(gè)共享變量時(shí),另一個(gè)一個(gè)線程立馬可以讀到這個(gè)修改的值。下面我們來(lái)看看文章的具體介紹內(nèi)容吧

    2021-12-12
  • 詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x

    這篇文章主要為大家介紹了詳解Elasticsearch如何把一個(gè)索引變?yōu)橹蛔x示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架

    詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架

    這篇文章主要介紹了詳解Spring Cloud 跨服務(wù)數(shù)據(jù)聚合框架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Spring @Value注解失效問(wèn)題解決方案

    Spring @Value注解失效問(wèn)題解決方案

    這篇文章主要介紹了Spring @Value注解失效問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)

    這篇文章主要介紹了歸并算法之有序數(shù)組合并算法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • SpringBoot下Mybatis的緩存的實(shí)現(xiàn)步驟

    SpringBoot下Mybatis的緩存的實(shí)現(xiàn)步驟

    這篇文章主要介紹了SpringBoot下Mybatis的緩存的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Springboot整合mqtt服務(wù)的示例代碼

    Springboot整合mqtt服務(wù)的示例代碼

    MQTT是一個(gè)基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡(jiǎn)單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。本文為大家分享了Springboot整合mqtt服務(wù)的示例代碼,需要的可以參考一下
    2022-03-03
  • 使用SpringBoot中的Schedule定時(shí)發(fā)送郵件的方法

    使用SpringBoot中的Schedule定時(shí)發(fā)送郵件的方法

    在SpringBoot中,你可以使用@Scheduled注解來(lái)創(chuàng)建定時(shí)任務(wù),@Scheduled注解可以應(yīng)用于方法上,表示這個(gè)方法是一個(gè)定時(shí)任務(wù),可以根據(jù)指定的時(shí)間間隔或固定時(shí)間執(zhí)行,本文就給大家介紹一下如何使用SpringBoot中的Schedule定時(shí)發(fā)送郵件,需要的朋友可以參考下
    2023-08-08

最新評(píng)論