【问题标题】:concurrent request to jersey rest service对球衣休息服务的并发请求
【发布时间】:2013-03-24 20:53:06
【问题描述】:

我正在使用 Eclipse、Tomcat7 和 Jersey 实现开发一个非常简单的 REST Web 服务,并连接到 MySQL。 查看球衣文档,我知道每个请求都会创建一个根资源类的新对象。但是不知道是不是每个请求都是独立的,比如一个请求需要等待很长时间,服务器会正​​常接受更多的请求吗?

问题是: 我有 2 个主要类,1 个类实现带有注释的 Jersey(Proxy.java),以及连接到 BD(Notificator.java)的其他类,只有一个此类(Singleton)的实例,以便仅使用 1 个连接目的。实现 Jersey 的类使用这个类。因此,如果其中一个请求被阻止,我不知道其他请求是否会运行,因为它们使用的是相同的 (Notificator.java) 实例。

关系是 (Proxy.java) 的 N 个实例使用唯一一个 (Notificator.java) 女巫有一个与 MySQL 的连接。

【问题讨论】:

  • 为什么只需要一个与数据库的连接?
  • 我这样做是为了简单,并避免并发问题。

标签: java web-services rest jdbc jersey


【解决方案1】:

Jersey 是在 servlet 之上开发的。每个传入请求都有一个新线程。您的代码正在为所有线程创建瓶颈,因为存在对单个可用连接对象的争用。如果您有多个请求,那么只有一个请求将使用该连接,其他请求必须等待。如果等待时间不是太长,那么没有问题。但是,如果等待时间超过 HTTP 请求超时,那么您的其他请求可能会以超时结束。

我了解到,由于某些业务需求/复杂性,您可能遇到单一连接瓶颈。因此,在所有这些我们无法同时处理所有请求并且可能有多种原因的情况下,我们应该将我们的 Web 服务创建为异步的。异步 Web 服务在 SUBMIT REQUEST-> REQUEST ACCEPTED(将被异步处理)和返回的 JOB URL 用于轮询-> CLIENT POLLS 的模型上工作,直到 JOB 没有完成。

希望对你有帮助!

【讨论】:

  • "每个传入的请求都有一个新线程",这是重点!!非常感谢。我知道存在瓶颈,因为我只使用一个连接,但通常只会有 2 或 3 个同时请求,所以我认为 taht 不会有问题。但我会研究“异步网络服务”。
【解决方案2】:

【讨论】:

  • thx,但最后老师说连接池很难实现,所以我只在Notificator类中使用了关键字“syncronized”来避免并发问题。我也意识到每次调用 jersey 都是独立运行的,因此,如果其中一个调用 blocs ,其他调用将正常运行。
  • 使用synchronized 关键字可以阻止其他呼叫。如果这是你需要的,那么好吧。
  • 我阻止了其他调用,但是当资源可用时,它们会唤醒吗?这就是我的老师向我解释的。这对我有用。
  • 是的,当资源可用时它们会唤醒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多