Java Springboot服务通信

Java Springboot服务通信,java,spring-boot,Java,Spring Boot,在springboot应用程序中,在@services之间通信的最佳方式是什么 我有一个serviceA,它处理一些逻辑,然后向serviceB发送一些数据,serviceB有一个执行器来运行一些数学运算,然后需要向serviceA发送更新 目前,我有一个blockingqueue要从服务a->B发送到,但这意味着当一个对象在队列上时,服务需要持续监视队列。。。applicationEvent publisher在这里有用吗?基本上@Service是一个Spring注释,用于自动化依赖关系管理。

在springboot应用程序中,在@services之间通信的最佳方式是什么

我有一个serviceA,它处理一些逻辑,然后向serviceB发送一些数据,serviceB有一个执行器来运行一些数学运算,然后需要向serviceA发送更新


目前,我有一个blockingqueue要从服务a->B发送到,但这意味着当一个对象在队列上时,服务需要持续监视队列。。。applicationEvent publisher在这里有用吗?

基本上
@Service
是一个Spring注释,用于自动化依赖关系管理。此注释并不意味着类实例将是“异步服务”(据我所知,这是您的上下文)意义上的服务。因此,要通信两个
@Service
注释类实例,您需要在另一个实例中引用其中一个实例,并且在异步通信中,提供一些回调功能

@Service
public class ServiceA{
   ServiceB serviceB;
  @Autowired      
  public ServiceA(ServiceB serviceB){
     this.serviceB = serviceB;
  }

  void foo(){
    serviceB.doTheJob();         
  }
 void jobDone() {
 {
}
回调可以通过serviceA的依赖关系管理注入提供:

@Service
public class ServiceB{
   ServiceB serviceA;
  @Autowired      
  public ServiceA(ServiceA serviceA){
     this.serviceA = serviceA;
  }

  public void doTheJob() {
    Executors.newSingleThreadExecutor().execute(() -> {/*do some job*/ 
                                                  serviceA.jobDone(););
  }

}
或者可以在方法调用时注入(分别使用修改的
doTheJob
call):

当然,上述回调方法只是示例,在您的上下文中可能需要使用队列

@Service
public class ServiceB{
  public void doTheJob(ServiceA serviceA) {
    Executors.newSingleThreadExecutor().execute(() -> {/*do some job*/ 
                                                  serviceA.jobDone(););
  }
}