設計モードのパブリケーション購読モード(4)Guava Eventbusイベント処理
EventBusはGuavaが実現したイベント処理メカニズムであり、設計モードにおけるパブリケーション/閲覧モードの優雅で簡単な解決策である.このようにして、複雑なクラス構造を作成する必要もなく、複雑なインタフェース階層もなく、イベントモデルベースのパブリケーション/サブスクリプションモードを迅速に実現できます.
イベントリスニングとパブリッシュ/サブスクリプションモードの実装が1つしか推奨できない場合は、GuavaのEventBusが優先です.
統合プロセス
統合GuavaのEventBusは非常に簡単で、カスタムの
? 本明細書のソースコードGithubアドレス
Guava依存性の増加
まずプロジェクトにguava依存性を増やし,同時にLombokを導入してJavaBeanの定義を簡略化した.
カスタムイベント
私たちがカスタマイズしたEventはGuavaのインタフェースを実装する必要はありません.自分が使用するイベントパラメータを定義すればいいのです.ここではmessageパラメータを1つだけ提供します.
カスタムEventListener
メソッドにGuavaの
イベント登録、パブリッシュ、および登録解除
まとめ
この記事では、GuavaのEventBusを使用して、パブリケーション/サブスクリプションモードを実装する方法を簡単に説明します.EventBusは,イベントメカニズムの軽量,単純,低侵入の実現方式として,簡単なイベント処理シーンで非常に推奨されている.
イベント処理メカニズムに分散や条件フィルタリングなどの要件がある場合は、前に説明したRedisパブリケーション/サブスクリプションモードやSpring Eventsイベント駆動モデルを使用することを考慮してください.
関連リンク一文はサブスクリプションモード を発表することを理解します Redisパブリケーション/サブスクリプションモード Spring Eventsイベント駆動モデル に深く入り込む
転載先:https://juejin.im/post/5ccad3f4f265da03af27e3ed
イベントリスニングとパブリッシュ/サブスクリプションモードの実装が1つしか推奨できない場合は、GuavaのEventBusが優先です.
統合プロセス
統合GuavaのEventBusは非常に簡単で、カスタムの
Event
とEventListener
をEventBus
に入れるだけで、EventBusでメッセージを公開することができます.次は少しずつ説明します.? 本明細書のソースコードGithubアドレス
Guava依存性の増加
まずプロジェクトにguava依存性を増やし,同時にLombokを導入してJavaBeanの定義を簡略化した.
<dependency>
<groupId>com.google.guavagroupId>
<artifactId>guavaartifactId>
<version>27.1-jreversion>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
カスタムイベント
私たちがカスタマイズしたEventはGuavaのインタフェースを実装する必要はありません.自分が使用するイベントパラメータを定義すればいいのです.ここではmessageパラメータを1つだけ提供します.
package net.ijiangtao.tech.designpattern.pubsub.guava;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* CustomEvent
*
* @author ijiangtao
* @create 2019-05-02 18:21
**/
@AllArgsConstructor
@Data
public class CustomEvent {
private String message;
}
カスタムEventListener
メソッドにGuavaの
@Subscribe
注記を追加することで、メソッドにEventをリスニングすることができます.package net.ijiangtao.tech.designpattern.pubsub.guava;
import com.google.common.eventbus.Subscribe;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
/**
* EventListener
*
* @author ijiangtao
* @create 2019-05-02 18:15
**/
@Slf4j
@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class CustomEventListener {
private List listenedMessageList;
@Subscribe
public void onEvent(CustomEvent event) {
log.info("Guava EventListener listened one message : {}", event.getMessage());
listenedMessageList.add(event.getMessage());
}
}
イベント登録、パブリッシュ、および登録解除
EventBus
のregister
メソッドは、前に定義されたリスナーをEventBus
に登録することができ、post
メソッドは、イベントを発行し、そのイベントを購読しているすべてのリスナーに通知することができ、unregister
メソッドは、指定されたリスナーをEventBus
から削除することができる.package net.ijiangtao.tech.designpattern.pubsub.guava;
import com.google.common.eventbus.EventBus;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
/**
* guava event bus tests
*
* @author ijiangtao
* @create 2019-05-02 18:24
**/
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class GuavaEventBusTests {
@Test
public void test() {
EventBus eventBus = new EventBus();
List listenedMessageList = new ArrayList<>();
CustomEventListener customEventListener = new CustomEventListener(listenedMessageList);
eventBus.register(customEventListener);
eventBus.post(new CustomEvent("post a custom event ---- 1"));
eventBus.unregister(customEventListener);
eventBus.post(new CustomEvent("post a custom event ---- 2"));
}
}
まとめ
この記事では、GuavaのEventBusを使用して、パブリケーション/サブスクリプションモードを実装する方法を簡単に説明します.EventBusは,イベントメカニズムの軽量,単純,低侵入の実現方式として,簡単なイベント処理シーンで非常に推奨されている.
イベント処理メカニズムに分散や条件フィルタリングなどの要件がある場合は、前に説明したRedisパブリケーション/サブスクリプションモードやSpring Eventsイベント駆動モデルを使用することを考慮してください.
関連リンク
転載先:https://juejin.im/post/5ccad3f4f265da03af27e3ed