我正在用Kafka和Flink等为多个用户构建缓存数据库查询的数据流管道,我对何时需要实现多线程感到困惑。
我已经建立了一个用户服务,其中包含一个使用Vertx的HTTP服务器。我有一个接受用户输入的端点。其中一个端点向Kafka服务发出网络请求,并从主题返回一些信息给用户。我创建了一个"kafka客户端"。为此,在每个用户对端点的请求中,我都会创建一个kafka客户端的新实例来发送请求。每个用户的请求是完全不相关的,所以谁的请求先被处理并不重要——没有竞争条件需要担心。
-
如果我为每个传入的用户请求创建一个新的kafka客户端实例,在用户1的请求中抛出的异常不应该阻止用户2的请求,对吗?(因为我已经在一个单独的用户线程)?
-
在每个请求上创建一个新的客户端实例是一个好的实践吗?我习惯了创建单例并在Node项目中重用它们(不确定你是如何"导入"的)。
-
而不是在每个请求上创建新的实例,如果我创建一个单例客户端并将其导入到端点,以便在每个用户的请求上重用,会在用户1的请求中抛出异常然后阻止用户2的请求吗?(除非我手动添加多线程)或者如果每个用户都有自己的线程,用户1的线程中的异常不会影响用户2的线程,即使他们使用相同的单例?
您通常会尽量避免自己实现多线程。您应该简单地创建处理程序和转换。X会在需要的时候打电话给他们。你可以阅读更多关于这是如何工作的vert。x。
-
抛出的异常不会阻止任何请求,即使是抛出它们的请求。然而,如果您忘记处理它们,它们将导致请求失败。异常根本不会影响第二个用户的请求,因为它们是相互隔离的。注意,这也取决于异常的性质。如果你共享你的kafka客户端,它断开了连接,那么所有的用户都会得到相同的错误。
-
这完全取决于你正在创建的客户端,你应该检查他们的文档。如果您对这个主题感兴趣,还可以了解一下连接池。您可以尝试在类内部创建客户端,而不是为每个请求创建一个新客户端。你也可以用vert。x kafka客户端,并在您的垂直的
start
函数中创建它。这样你就安全了。 -
同1.