国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用spring自帶的發(fā)布訂閱來實現(xiàn)發(fā)布訂閱

這篇具有很好參考價值的文章主要介紹了使用spring自帶的發(fā)布訂閱來實現(xiàn)發(fā)布訂閱。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

背景

公司的項目以前代碼里面有存在使用spring自帶發(fā)布訂閱的代碼,因此稍微學習一下如何使用,并了解一下這種實現(xiàn)方式的優(yōu)缺點。

優(yōu)點

  • 實現(xiàn)方便,代碼方面基本只需要定義消息體和消費者,適用于小型應用程序。
  • 不依賴外部中間件,因而不需要復雜的配置、部署。

缺點

  • 無法提供消息持久性,項目一旦重啟,消息就會丟失,因而不適合實現(xiàn)延遲隊列。
  • 對比消息隊列,無法實現(xiàn)復雜的消息過濾、路由過濾。
  • 無法實現(xiàn)跨應用程序的事件通信。不同應用程序之間的事件發(fā)布和訂閱更為容易。

發(fā)布訂閱模式的優(yōu)缺點我就不說了,就說說不同實現(xiàn)方式之間的優(yōu)缺點。

一、創(chuàng)建消息類

消息類需要繼承ApplicationEvent類。因為java調(diào)用構造函數(shù)的機制就是默認會調(diào)用父類的構造函數(shù),而ApplicationEvent類只有一個單參數(shù)的構造函數(shù),無法自動調(diào)用,每個構造函數(shù)都需要顯式調(diào)用父類的構造函數(shù)。也就是super(source);

package org.jeecg.modules.test.testPublic;
import org.springframework.context.ApplicationEvent;
import java.util.Objects;

/**
 * @ClassName: MyEvent
 * @Author: zjc
 * @Date: 2023/8/30 18:22
 * @Description:
 **/
public class MyEvent extends ApplicationEvent {
	private String taskId;
	private Integer sourceType;
	
	public MyEvent(Object source) {
		super(source);
	}
	/**
	 *
	 *  @param source   觸發(fā)事件的對象,可隨便傳,不過建議傳自己可能用得到的對象。好像在調(diào)用放直接this的挺多
	 * @param taskId    任務id,自己定義的事件要處理的內(nèi)容
	 * @param sourceType    自己定義的源類型,用來在多場景觸發(fā)情況下區(qū)分不同場景的標志
	 * @return: null
	 **/
	public MyEvent(Object source,String taskId,Integer sourceType) {
		super(source);
		this.taskId=taskId;
		this.sourceType=sourceType;
	}

	public String getTaskId() {
		return taskId;
	}

	public void setTaskId(String taskId) {
		this.taskId = taskId;
	}

	public Integer getSourceType() {
		return sourceType;
	}

	public void setSourceType(Integer sourceType) {
		this.sourceType = sourceType;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
		MyEvent myEvent = (MyEvent) o;
		return Objects.equals(taskId, myEvent.taskId) && Objects.equals(sourceType, myEvent.sourceType);
	}

	@Override
	public int hashCode() {
		return Objects.hash(taskId, sourceType);
	}

	@Override
	public String toString() {
		return "MyEvent{" +
				"taskId='" + taskId + '\'' +
				", sourceType=" + sourceType +
				'}';
	}
}

二、發(fā)布消息

發(fā)布消息可以直接使用ApplicationContext對象調(diào)用publishEvent方法。因為ApplicationContext接口繼承了ApplicationEventPublisher接口。注意消息類必須要繼承ApplicationEvent類才能作為參數(shù)發(fā)布消息。

package org.jeecg.modules.test.testPublic;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName: EventController
 * @Author: 
 * @Date: 2023/8/31 17:53
 * @Description:
 **/
@RestController
@Api("test")
@RequestMapping("/test")
public class EventController {
	@Autowired
	private ApplicationContext applicationContext;
	@ApiOperation("testEvent")
	@GetMapping("/testEvent")
	public void testEvent(){
		MyEvent myEvent=new MyEvent(this,"123456",1);
		applicationContext.publishEvent(myEvent);
	}
	@ApiOperation("testEvent1")
	@GetMapping("/testEvent1")
	public void testEvent1(){
		MyEvent myEvent=new MyEvent(this,"123456",2);
		applicationContext.publishEvent(myEvent);
	}
}

三、監(jiān)聽消息

監(jiān)聽消息類需要實現(xiàn)ApplicationListener接口,并通過泛型傳入要監(jiān)聽的消息類,并重寫onApplicationEvent方法。spring內(nèi)的同一個消息可以有多個監(jiān)聽類,一旦監(jiān)聽到消息,監(jiān)聽該消息的全部監(jiān)聽類都會執(zhí)行。

監(jiān)聽類1:

package org.jeecg.modules.test.testPublic;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * @ClassName: MyEventListener
 * @Author: 
 * @Date: 2023/8/31 17:50
 * @Description:
 **/
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
	@Override
	public void onApplicationEvent(MyEvent event) {
		System.out.println("消費者開始消費"+event.toString()+event.getSource().toString());
	}
}

消費者2

package org.jeecg.modules.test.testPublic;

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * @ClassName: MyEventListener
 * @Author: 
 * @Date: 2023/8/31 17:50
 * @Description:
 **/
@Component
public class MyEventListener1 implements ApplicationListener<MyEvent> {
	@Override
	public void onApplicationEvent(MyEvent event) {
		System.out.println("消費者1開始消費"+event.toString()+event.getSource().toString());
	}
}

四、測試

調(diào)用testEvent接口

使用spring自帶的發(fā)布訂閱來實現(xiàn)發(fā)布訂閱,spring,java,中間件

調(diào)用testEvent1接口

使用spring自帶的發(fā)布訂閱來實現(xiàn)發(fā)布訂閱,spring,java,中間件

結果均符合預期,可以通過在消息體里面加一個字段來區(qū)分消息來著不同的觸發(fā)場景。
即使沒有在結構體加上區(qū)分消息來源的標識,也可以用消息一開始傳入的源對象來大概定位到是哪一個類里面觸發(fā)的消息。文章來源地址http://www.zghlxwxcb.cn/news/detail-686898.html

到了這里,關于使用spring自帶的發(fā)布訂閱來實現(xiàn)發(fā)布訂閱的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及與各中間件集成

    Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及與各中間件集成

    目錄 前言 源碼地址 官方中文文檔 使用版本 spring Spring Boot 3.1.0 中間件 使用到的組件與功能 環(huán)境安裝 虛擬機 nexus nacos 集成過程 工程搭建 父工程搭建 子工程 服務集成 nacos集成 配置文件 服務注冊與發(fā)現(xiàn)-discovery 服務注冊 啟動 服務發(fā)現(xiàn) 測試 配置管理-config 新增配置 ?測試

    2024年02月07日
    瀏覽(28)
  • 基于 Docker 的 Spring Boot 項目部署演示,其中使用了 Redis、MySQL 和 RabbitMQ 中間件

    這是一個基于 Docker 的 Spring Boot 項目部署演示,其中使用了 Redis、MySQL 和 RabbitMQ 中間件。 拉取 MySQL 鏡像: 創(chuàng)建 MySQL 容器: 將 密碼 、 數(shù)據(jù)庫名 、 用戶名 和 密碼 替換為您自己的值。 拉取 Redis 鏡像: 創(chuàng)建 Redis 容器: 拉取 RabbitMQ 鏡像: 創(chuàng)建 RabbitMQ 容器: 構建和運行

    2024年02月06日
    瀏覽(21)
  • 金蝶中間件Apusic單機部署并發(fā)布服務

    金蝶中間件Apusic單機部署并發(fā)布服務

    ?2.配置環(huán)境變量 ? ?配置自己的jdk路徑,esc退出,:wq保存。 ?? ?3.啟動運行 ?啟動后我這里顯示license過期,需要替換license.xml文件 ?? ?進入到金蝶中間件的安裝目錄下,替換license.xml文件并重新啟動 第一次啟動時需要輸入管理員密碼 輸入完成后中間件成功啟動,服務器就

    2024年02月12日
    瀏覽(23)
  • 利用消息中間件RabbitMQ創(chuàng)建隊列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    利用消息中間件RabbitMQ創(chuàng)建隊列以及扇出(Fanout)、訂閱(Direct)、主題(Topic)交換機來完成消息的發(fā)送和監(jiān)聽接收(完整版)

    目錄 一、前期項目環(huán)境準備 1.1父項目以及子項目 1.2配置pom.xml 1.3配置application.yml 二、扇出(Fanout)?交換機實現(xiàn)消息的發(fā)送和接收 2.1編寫子項目consumer(消費者,接收消息)的代碼實現(xiàn)扇出(Fanout)交換機接收消息 2.1.1consumer子項目結構 2.1.2FanoutConfig類的實現(xiàn)扇出(Fanout)交

    2024年02月05日
    瀏覽(95)
  • Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及與各中間件集成
Sleuth+Zipkin集成分布式鏈路追蹤

    Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及與各中間件集成 Sleuth+Zipkin集成分布式鏈路追蹤

    目錄 前言 源碼地址 官方中文文檔 使用版本 spring Spring Boot 3.1.0 中間件 使用到的組件與功能 環(huán)境安裝 虛擬機 nexus nacos 集成過程 工程搭建 父工程搭建 子工程 服務集成 nacos集成 配置文件 服務注冊與發(fā)現(xiàn)-discovery 服務注冊 啟動 服務發(fā)現(xiàn) 測試 配置管理-config 新增配置 ?測試

    2024年02月12日
    瀏覽(59)
  • JAVA 實現(xiàn) Redis 發(fā)布訂閱

    JAVA 實現(xiàn) Redis 發(fā)布訂閱

    發(fā)布訂閱: 消息發(fā)布者發(fā)布消息 和 消息訂閱者接收消息 ,兩者之間通過某種媒介聯(lián)系起來 例如訂雜志,當自己訂閱了愛格雜志,每個月會發(fā)刊一本。到發(fā)布的時候派送員將雜志送到自己手上就能看到雜志內(nèi)容。只有我們訂閱了該雜志才會派送給我們 Redis 發(fā)布訂閱(pub/su

    2024年02月14日
    瀏覽(19)
  • 使用消息中間件實現(xiàn)系統(tǒng)間的異步通信和解耦

    ??????? 目錄 引言 一. 選擇合適的消息中間件 二. 定義消息格式和通信協(xié)議 1. 定義消息格式 消息頭 消息體 2. 定義通信協(xié)議 發(fā)送消息 接收消息 消息處理 3. 示例代碼 定義消息格式 發(fā)送消息 接收消息 三、發(fā)布-訂閱模式 1. 定義發(fā)布-訂閱模式 2. 示例代碼 發(fā)布消息 訂

    2024年02月19日
    瀏覽(21)
  • 82 # koa-bodyparser 中間件的使用以及實現(xiàn)

    82 # koa-bodyparser 中間件的使用以及實現(xiàn)

    安裝依賴 koa 文檔:https://koajs.cn/# koa 中不能用回調(diào)的方式來實現(xiàn),因為 async 函數(shù)執(zhí)行的時候不會等待回調(diào)完成 koa 中所有的異步都必須是 promise,只有 promise 才有等待效果,必須所有的 next 方法前需要有 await、return 否則沒有等待效果 實現(xiàn)一個表單提交功能 server.js : 啟動服

    2024年02月09日
    瀏覽(21)
  • 【云原生進階之PaaS中間件】第一章Redis-1.6.1Java項目使用Redis

    【云原生進階之PaaS中間件】第一章Redis-1.6.1Java項目使用Redis

    ????????redis的java客戶端很多,官方推薦的有三種: Jedis Lettuce Redisson Spring 對Redis 客戶端進行了整合,提供了Spring Date Redis ,在Spring Boot項目中還提供了對應的Starter,即spring-boot-starter-data-redis。 ????????使用Jedis操作Redis的步驟: 1.獲取鏈接; 2.執(zhí)行操作; 3.關閉連接

    2024年02月09日
    瀏覽(22)
  • 阿里獨家發(fā)布:消息中間件進階手冊,限時開源,助你技術進階一臂之力

    阿里獨家發(fā)布:消息中間件進階手冊,限時開源,助你技術進階一臂之力

    相信大家都深有體會,在實際工作中,消息中間件已成為我們進行系統(tǒng)間數(shù)據(jù)交換的得力助手。它猶如一座橋梁,巧妙地解決了應用解耦、異步消息傳遞和流量削峰等棘手問題。其強大功能,無需我過多贅述。 當前,業(yè)界中消息中間件的實現(xiàn)方式多達數(shù)十種,真可謂百花齊放

    2024年01月25日
    瀏覽(102)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包