利用事件监听机制实现应用埋点

<dependencies>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
  </dependency>
  <dependency>
    <groupId>org.example</groupId>
    <artifactId>listener-ext1</artifactId>
    <version>latest</version>
    <scope>system</scope>
    <systemPath>C:/Users/admin/Desktop/临时/event-listener/listener-ext1/target/listener-ext1-1.0-SNAPSHOT.jar</systemPath>
  </dependency>
  <dependency>
    <groupId>org.example</groupId>
    <artifactId>listener-ext2</artifactId>
    <version>latest</version>
    <scope>system</scope>
    <systemPath>C:/Users/admin/Desktop/临时/event-listener/listener-ext2/target/listener-ext2-1.0-SNAPSHOT.jar</systemPath>
  </dependency>
</dependencies>
package org.example.spi;

import org.example.Message;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ServiceLoader;

public class ListenerSupport {
    private static final ListenerSupport listenerSupport = new ListenerSupport();
    private List<MessageListener> listeners = new ArrayList<>();
    private ListenerSupport(){
        //利用SPI机制扫描classpath下所有MessageListener接口
        ServiceLoader<MessageListener> loader = ServiceLoader.load(MessageListener.class);
        Iterator<MessageListener> iterator = loader.iterator();
        while(iterator.hasNext()){
            listeners.add(iterator.next());
        }
    }
    public static ListenerSupport getInstance(){
        return listenerSupport;
    }


    public void ListenerSupport(MessageListener listener){
        listeners.add(listener);
    }
    public void triggerReady(){
        for(MessageListener listener : listeners){
            listener.onReady();
        }
    }

    public void triggerReceive(Message message){
        for(MessageListener listener : listeners){
            listener.onReceive(message);
        }
    }

    public void triggerError(Throwable throwable){
        for(MessageListener listener : listeners){
            listener.onError(throwable);
        }
    }

    public void triggerComplete(){
        for(MessageListener listener : listeners){
            listener.onComplete();
        }
    }
}

package org.example.spi;

import org.example.Message;

public interface MessageListener {
    public default void onReady(){
        //默认接口实现
    }
    public void onReceive(Message message);
    public default void onComplete(){
        //默认接口实现
    }
    public default void onError(Throwable throwable){
        //默认接口实现
    }
}

package org.example;

public class Client {
    public static void main(String[] args) {
        new MessageService().receiveMessage();
    }
}
package org.example;

import org.example.spi.ListenerSupport;

import java.util.Random;
import java.util.UUID;

public class MessageService {
    private ListenerSupport listenerSupport;

    public MessageService() {
        listenerSupport = ListenerSupport.getInstance();
    }

    public Message receiveMessage() {
        Message msg = null;
        try {
            //onReady
            System.out.println("与服务器通信连接已就绪");
            listenerSupport.triggerReady();
            Thread.sleep(1000);
            String key = String.valueOf(new Random().nextInt(1000000));
            String content = UUID.randomUUID().toString();
            msg = new Message(key, content);
            System.out.println("接收到xxx.xxx.xxx.xxx报文:" + msg);
            //onReceive
            listenerSupport.triggerReceive(msg);
            Thread.sleep(1000);
            System.out.println("已发送至下游系统");
            Thread.sleep(1000);
        }catch (Exception e) {
            //onError
            e.printStackTrace();
            listenerSupport.triggerError(e);
        }finally {
            //onComplete
            listenerSupport.triggerComplete();
        }
        return msg;
    }
}

package org.example;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class Message {
    private String key;
    private String content;

}

ext1

<dependencies>
  <dependency>
    <groupId>org.example</groupId>
    <artifactId>core</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
  <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
  </dependency>
</dependencies>
package org.example.listener;

import org.example.Message;
import org.example.spi.MessageListener;

public class MessageListenerImpl1 implements MessageListener {

    @Override
    public void onReceive(Message message) {
        System.out.println("[EXT1]已将报文持久化到时序库:" + message.toString());
    }
}

在这里插入图片描述

新建org.example.spi.MessageListener文件
org.example.listener.MessageListenerImpl1
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗的老史

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值