当前位置: 首页 > 知识库问答 >
问题:

使用SSLContext.getDefault()在spring中使用SSL设置Ignite集群

百里阳平
2023-03-14

我试图在我的Spring应用程序中设置一个带有SSL加密的Ignite集群。我的目标是在几个节点上建立一个复制缓存。

我们将应用程序部署到Tomcat8中,并在Tomcat启动时为密钥和信任库设置环境变量。

@Bean
public SpringCacheManager replicatedCache() {

    int[] eventTypes = new int[] {EventType.EVT_CACHE_ENTRY_EVICTED, EventType.EVT_CACHE_OBJECT_REMOVED, EventType.EVT_CACHE_ENTRY_DESTROYED, EventType.EVT_CACHE_OBJECT_EXPIRED};

    SpringCacheManager cacheManager = new SpringCacheManager();

    IgniteConfiguration configuration = new IgniteConfiguration();
    configuration.setIncludeEventTypes(eventTypes);
    configuration.setGridName("igniteCluster");

    Slf4jLogger logger = new Slf4jLogger(LoggerFactory.getLogger(IGNITE_CACHE_LOGGER_NAME));
    configuration.setGridLogger(logger);

    CacheConfiguration cacheConfiguration1 = new CacheConfiguration();
    cacheConfiguration1.setName("replicatedCache");
    cacheConfiguration1.setCacheMode(CacheMode.REPLICATED);
    cacheConfiguration1.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);

    configuration.setCacheConfiguration(cacheConfiguration1);

    configuration.setSslContextFactory(() -> {
        try {
            return SSLContext.getDefault();
        } catch (NoSuchAlgorithmException e) {
            throw new WA3InternalErrorException("Could not create SSLContext", e);
        }
    });
    configuration.setLocalHost(env.getProperty("caching.localBind", "0.0.0.0"));

    TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
    List<String> nodes = Arrays.stream(env.getRequiredProperty("caching.nodes").split(",")).collect(Collectors.toList());
    ipFinder.setAddresses(nodes);
    TcpDiscoverySpi spi = new TcpDiscoverySpi();
    spi.setIpFinder(ipFinder);
    configuration.setDiscoverySpi(spi);

    TcpCommunicationSpi communicationSpi = new TcpCommunicationSpi();
    communicationSpi.setLocalPort(env.getRequiredProperty("caching.localPort", Integer.class));
    communicationSpi.setConnectTimeout(100000); // Line added in first edit
    configuration.setCommunicationSpi(communicationSpi);

    IgnitePredicate<? extends CacheEvent> localEvent = event -> {
        System.out.println(event);
        return true;
    };

    Map<IgnitePredicate<? extends Event>, int[]> ignitePredicateIntegerMap = Collections.singletonMap(localEvent, eventTypes);
    configuration.setLocalEventListeners(ignitePredicateIntegerMap);

    cacheManager.setConfiguration(configuration);

    return cacheManager;
}
    Metrics for local node (to disable set 'metricsLogFrequency' to 0)
        ^-- Node [id=41687971, name=igniteCluster, uptime=00:54:00:302]
        ^-- H/N/C [hosts=2, nodes=2, CPUs=4]
        ^-- CPU [cur=33.5%, avg=36.96%, GC=0%]
        ^-- Heap [used=193MB, free=85.51%, comm=627MB]
        ^-- Non heap [used=125MB, free=-1%, comm=127MB]
        ^-- Public thread pool [active=0, idle=2, qSize=0]
        ^-- System thread pool [active=0, idle=7, qSize=0]
        ^-- Outbound messages queue [size=0]
2017-05-02T08:15:35,154 []  [] [grid-nio-worker-tcp-comm-1-#18%igniteCluster%] WARN  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi [warning():104] [] - Communication SPI session write timed out (consider increasing 'socketWriteTimeout' configuration property) [remoteAddr=/10.30.0.106:53603, writeTimeout=2000]
2017-05-02T08:15:39,192 []  [] [grid-nio-worker-tcp-comm-2-#19%igniteCluster%] WARN  org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi [warning():104] [] - Communication SPI session write timed out (consider increasing 'socketWriteTimeout' configuration property) [remoteAddr=/10.30.0.106:53604, writeTimeout=2000]
    2017-05-03T12:19:29,429 []  [] [localhost-startStop-1] WARN  org.apache.ignite.internal.processors.cache.GridCachePartitionExchangeManager [warning():104] [] - Failed to wait for initial partition map exchange. Possible reasons are:
      ^-- Transactions in deadlock.
      ^-- Long running transactions (ignore if this is the case).
      ^-- Unreleased explicit locks.

共有1个答案

郑波
2023-03-14

如错误消息所示,尝试增加socketwritetimeout。SSL连接速度较慢,而且在您的网络中,默认值可能不够。

 类似资料:
  • 我试图用SSL (TLS)在节点间以及节点和客户端之间配置Kafka节点,但是遇到了配置问题。Kafka版本是2.3.0。我的相关设置是: 仅供参考,为了简单起见,我从实例化Kafka容器的docker-compose文件中复制了设置。env vars将1:1映射到server.properties.中的属性。在容器启动期间,这些设置将应用于server.properties文件。 当我开始使用此

  • 问题内容: 我使用RSA建立SSL我的春节,引导服务器(如何配置SSL /HTTPS的春天?通过以下)的指导: 使用创建了一个新的密钥库和密钥 将这些行放在我的application.properties文件中: 奇迹般有效。但是,当我通过运行生成AES 256密钥并将.properties文件更改为新的密钥存储区/密钥值时,对服务器的每个请求均导致。我应该遵循什么步骤来成功配置它? 问题答案:

  • 我对保护服务器不太熟悉,所以我对这方面不太了解,但我需要让运行在数字海洋水滴上的Spring Boot应用程序使用HTTPS。 我的想法是注册一个letsencrypt证书,然后告诉Spring使用它。 然而,我不知道如何做到这一点。 谢谢。

  • 问题内容: 我正在尝试使用docker映像(https://hub.docker.com/r/jboss/keycloak/版本4.5.0-Final)部署keycloak,并面临设置SSL的问题。 根据文档 Keycloak映像允许您同时指定私钥和用于服务HTTPS的证书。在这种情况下,您需要提供两个文件: tls.crt- 证书 tls.key- 私钥这些文件需要挂载在/ etc / x509

  • 我知道这可能看起来很熟悉,但我向大家保证,我已经检查并重新运行了所有的答案,但我仍然不能使用我的有效GoDaddy SSL证书。下面是我在Spring Boot应用程序中制作和使用密钥库的步骤。我很感谢对此帖子的任何建议或评论。 > 我已经从我的GoDaddy帐户下载了与tomcat选件相关的证书包(还没有生成和提交CSR,只是使用了GoDaddy预生成的证书包)。该包包含以下一组文件。 GD_b

  • 问题内容: 我正在使用MySQLi从MySQL表中以阿拉伯语获取数据。所以我通常以程序风格使用它: 现在,我正在使用OOP样式,因此尝试查看是否可以设置某些内容而不是上面的设置? 我只是在PHP手册中找到了它,所以做到了,但是将名称设置为UTF8呢? 问题答案: 一样的: $ mysqli- > query(“ SET NAMES’utf8’”); 从手册中: 这是更改字符集的首选方法。不建议使用