【问题标题】:How to optimize a Liferay portal with web services?如何使用 Web 服务优化 Liferay 门户?
【发布时间】:2014-11-26 18:01:34
【问题描述】:

我创建了一个 Liferay 6.2 门户。他们的 portlet 调用外部 Web 服务(即提要、天气)。

为了优化门户性​​能,我不能在客户端级别进行调用(我希望它们在服务器端)。换句话说,当门户启动时,Web Service 请求的响应必须首先由服务器做出,以便在访问门户时可用。

我在 Liferay EhCache 中搜索了这种情况,但我不了解实践应用程序。这个程序是最好的方法吗?

【问题讨论】:

    标签: web-services liferay


    【解决方案1】:

    说实话,liferay 的性能很差。在我们的高负载项目中,我们做了很多改进。

    但是在起点上有一个缓存就足够了。

    你可以这样做:

    ehache.xml:

    <cache name="weatherCache" eternal="false"
           maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" maxElementsOnDisk="100000"
           diskExpiryThreadIntervalSeconds="120" timeToLiveSeconds="3600"
           memoryStoreEvictionPolicy="LRU"/>
    

    WeatherServiceImpl :

    @Service
    public class WeatherServiceImpl implements WeatherService, CacheKeyGenerator<Serializable> {
       ...
    
    
      @Override
      @Cacheable(cacheName = "weatherCache", keyGenerator = @KeyGenerator(name = "xxx.yyy.WeatherServiceImpl"))
      public WeatherResult getWeatherResult(...){
      }
       ...
    
      @Override
      public Serializable generateKey(MethodInvocation methodInvocation) {
       //methodInvocation.getArguments()[0]
       ....
      }
    
      @Override
      public Serializable generateKey(Object... objects) {
        ....
      }
      ...
    
    }
    

    【讨论】:

    • Olaf 和 Maksym,感谢您的回答。来自小部件(例如accuweather.com)的Web 服务也可以被缓存?如果没有,您是否知道任何具有这种行为的 Web 服务?
    • 您可以而且应该缓存来自任何网络服务的不经常更改的数据,尤其是来自 accuweather.com 的数据。
    • 问题是这种Web Service没有使用实现服务的类(答案在portlet视图中得到),即在JSP中,服务调用是这样的:accuweather.com/pt/pt/coimbra/272818/weather-forecast/…>
    【解决方案2】:

    对于提要和天气,缓存它们是有意义的——它们通常不会时不时地改变。您还可以异步显示您的 portlet。在liferay-portlet.xml(或其DTD,有据可查)中查找“ajaxable”和“render-weight”

    Maksym 已经给出了一些关于如何实现这一点的代码 - 当然,我不一定同意他对性能假设的看法。如果您调用外部 Web 服务并且需要 1 秒的时间来回答,那么您很容易以糟糕的性能告终。但是,这不是 Liferay 的属性,而是您与该外部服务的集成。

    【讨论】:

    • 对不起,可能是我指出的不好,我的意思是关于 liferay 性能,与 Web 服务无关。
    • 好吧,即便如此,您也可以从 Liferay 中获得良好的性能和出色的扩展能力。它取决于什么?基础设施、定制、使用的应用程序等 - 但我们不要在这些 cmets 中打架。我只是不能让它这样,但如果我们同意不同意也没关系
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多