首页 > 解决方案 > 在带有 Java 扩展的 SymmetricDS 中使用后备同步 URL

问题描述

我有一种情况,我有一个移动系统,当它在路上时,它将通过引擎文件中指定的默认同步 URL 连接到 symmetricDS。但是,当该设备返回基地时,它最终会与主 symmetricDS 服务器在同一个内部网络上。因此它无法从网络内部解析外部主机名。

无论如何....我想设置一个 symmetricDS 扩展,以便它可以尝试默认 URL,然后如果它不起作用,则回退到 192.168.0.5 的辅助 IP。这是我认为我需要开始的代码片段。我从来没有做过任何java,所以我读到这里有点迷茫。

import java.net.URI;

import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.transport.ISyncUrlExtension;
import org.jumpmind.symmetric.ext.ISymmetricEngineAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SyncUrlRewrite implements ISymmetricEngineAware, ISyncUrlExtension {
  protected Logger log = LoggerFactory.getLogger(getClass());

  ISymmetricEngine engine;

  @Override
  public String resolveUrl(URI url) {

     return url.toString();
  }

  @Override
  public void setSymmetricEngine(ISymmetricEngine engine) {
     this.engine = engine;
  }
}

标签: javasymmetricds

解决方案


您可以尝试使用该方法查看并实现ISyncUrlExtension接口resolveUrl()。要使其正常工作,请sync_url为具有协议的节点配置ext://beanName. beanName是您在扩展 xml 文件中为扩展点指定的名称。

然后,您可以实现逻辑以使该resolveUrl()方法解析,例如,您的移动客户端要在sync_url字符串中尝试的 URL 列表。

    public String resolveUrl(URI uri) {
        if (uri.toString().startsWith("ext")) {
            Map<String, String> params = getParameters(uri);

            //Do some logic with your parsed parameters and return a url

        } else {
            else return uri.toString();
        }
    }

该类HttpBandwidthSelector可以为您提供示例实现。


推荐阅读