【问题标题】:Java Axis WebService Overload ControlJava Axis WebService 重载控制
【发布时间】:2012-05-15 17:02:06
【问题描述】:

我们想在我们的轴 Web 服务上实现一个重载机制。 基本上,当 TPS(每秒事务数)值达到指定值(例如 100 或 150)时,我们希望拒绝传入的 SOAP 请求。 为此,我们需要计算收到的请求数和发送的响应数。

您能否建议我从哪里开始实施此实施?如何计算请求和响应?

非常感谢, 塞卡

【问题讨论】:

    标签: java controls overloading axis


    【解决方案1】:

    我认为您应该在处理程序中实现消息计数和删除。以下是 Axis 文档中关于如何在 Web 服务中编写和注册处理程序的一个很好的描述:Using handlers in JAX-WS Web services

    基本上,您在代码方面所做的事情:您创建一个实现 javax.xml.ws.handler.soap.SOAPHandler 的处理程序类。在handleMessage(...) 方法中,您计算​​传入的消息,并且如Javadoc for the Handler interface 所示,如果达到过载限制,则返回false

    希望这可以帮助您入门!

    【讨论】:

    • 我创建了一个处理程序并将其与请求流和响应流相关联。我有一个疑问,因为这个处理程序将同时被多个线程调用,我们是否需要在增加或减少计数器值时处理同步?还请告诉我 Axis 如何处理多个同时请求?
    • 这是一个很好的问题,但我不知道确切的答案。但是,由于使用原子类非常容易(例如AtomicInteger),我建议您只使用其中之一。
    • 此外,与同步(使用 synchronized 关键字)相比,这些原子类在效率和易错性方面是更好的选择。
    • AtomicInteger 是从 java 1.5 开始引入的,但是我们的 App 是在 Java 1.4 上运行的,那么 Java 1.4 中的 AtomicInteger 有什么替代品吗?
    • 不幸的是,这些原子类依赖于硬件特性,这意味着您不能只用一些库替换它们。但是,在您的情况下,我认为一个简单的 volatile 变量也可能就足够了。您将在那里遇到竞争条件,但由于消息的到达无论如何都是不确定的,因此计数或丢失消息应该不是大问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多