在springboot应用程序中,@ services之间进行通信的最佳方法是什么?
我有一个处理一些逻辑的serviceA,然后将一些数据发送到serviceB,后者有一个执行程序来运行一些数学运算,然后需要将更新发送给serviceA。
当前,我有一个从服务A-> B发送到的阻塞队列,但这意味着当对象在队列中时,服务将需要不断监视队列... applicationEvent发布者在这里有用吗?>
答案 0 :(得分:0)
基本上@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
调用)上注入:
@Service
public class ServiceB{
public void doTheJob(ServiceA serviceA) {
Executors.newSingleThreadExecutor().execute(() -> {/*do some job*/
serviceA.jobDone(););
}
}
以上回调方法当然只是示例,在您的上下文中可能需要使用队列。