我有一个spring引导项目,部署在两个服务器上,并使用nginx。项目中的一种方法可以做到:
中设置了一些键值。
中插入某些内容
1之后,我想以异步方式完成2。
一种解决方案是让doDB()成为springboot @异步方法:
Class A {
public void ***() {
doRedis() // 1.set some key-values in redis
doDB() // 2.insert something in db
}
}
Class B {
@async
doDB()
}另一个解决方案是向MQ发送消息:
Class A {
public void ***() {
doRedis() // 1.set some key-values in redis
sendMessage()
}
}
Class B {
onMessage(){
doDB()
}
}如果A类和B类都在spring启动项目中,则只需将该项目部署到两个服务器中即可。我认为使用@async就足够了,没有必要使用MQ来实现异步方式,因为服务器一执行B类doDB()和服务器二执行B类doDB()没有区别。如果B类位于另一个项目中,那么使用MQ是很好的,因为它对项目一执行redis工作和项目二执行db工作是解耦的。
是对的吗?谢谢!
发布于 2022-10-05 08:26:54
基本上,您是对的,如果它将位于同一服务器内的同一个应用程序中,则不需要MQ,因为异步已经有一个队列。但是,即使在同一个应用程序中,您也应该确定一些要点。
。
上处理其余的消息。
如果应用程序收到大量请求,并且在异步线程池中没有仔细设置线程,则在使用机器资源时可能会出现溢出错误或其他问题。
在应用程序的能力范围内选择,不要从第一天起就过度设计,你从你拥有的和你已经测试过的东西中分离出来。
https://stackoverflow.com/questions/72379109
复制相似问题