<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