最近,我想在我的网站上集成在线支付服务。一切都很顺利,直到我有一个关于它的架构的问题。好吧,该服务的工作方式如下。首先,它检查以支付请求的形式推送到 kafka 主题的任何传入消息,然后异步处理这些消息,并再次返回侦听消息。我应该注意,消息是从最新的偏移量中读取的,在我看来,这在支付系统方面不是正确的方式,因为某些请求可能没有得到完全处理。上述方案中是否存在架构问题?顺便说一句,该服务是用 Go 编写的,所有异步操作都由 goroutine 和通道执行。这是一个片段
func (kc *KafkaConsumer) Consume(signalChan chan os.Signal) {
for{
select{
case sig := <-signalChan:
Sugar.Info("Caught signal %v", sig)
break
default:
message, err := kc.Consumer.ReadMessage(-1)
if err == nil{
Sugar.Infof("Got a new message %v",message)
done := make(chan bool)
go router.UseMessage(*message, done)
<-done
}else{
Log.Error(err.Error())
}
}
}
}
在这里,ReadMessage 例程读取最近的消息,忽略之前发送的消息。这是一个好方法吗?提前致谢