服务端集群搭建

当单个服务端节点无法满足当前业务吞吐量或者业务要求时,服务端将会采用集群方式对外提供服务。

URule属于Web应用,所以URule服务端的集群搭建也和传统的Web应用一致,有一个负载+n个服务端节点。

接下来我们将提供一种比较简便的Redis session共享的方式搭建URule的服务端集群:

1、在采用springboot方式搭建URule 的服务端工程中,pom.xml引入 spring-session-data-redis 。(为了避免Redis空闲一段时间后连接挂起的问题,此处采用了Jedis连接池)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>redis.clients</groupId>
                    <artifactId>jedis</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>lettuce-core</artifactId>
                    <groupId>io.lettuce</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.3</version>
        </dependency>
        <dependency>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-pool2</artifactId>
            </dependency>

2、配置RedisSessionConfig类

//设置session过期时间,默认是1800秒
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 30 * 60) 
public class RedisSessionConfig {

}

3.yaml配置

spring:
  redis:
    host: localhost
    port: 6379
    database: 1
    password: 12345678
    timeout: 10000
    jedis:
      pool:
        max-active: 50    # 连接池最大连接数(使用负值表示没有限制)
        max-wait: 5000    # 连接池中连接用完时,新的请求等待时间(毫秒),超过该时间抛出异常JedisConnectionException,(默认-1,负值表示没有限制,不建议使用默认值)
        max-idle: 10      # 连接池中的最大空闲连接,默认8
        min-idle: 2       # 连接池中的最小空闲连接,默认0

4、URule规则设计器中复制粘贴功能Session共享实现

package com.bstek.urule.sample.redis.service;

import org.springframework.stereotype.Service;
import com.bstek.urule.console.RequestHolder;
import com.bstek.urule.console.editor.store.ClipboardStore;
import lombok.extern.slf4j.Slf4j;
/**
 * 基于Session实现复制粘贴规则
 *
 */
@Service
@Slf4j
public class RedisSessionClipboardStore implements ClipboardStore {

    @Override
    public String get(String key) {
        String sessionkey = RequestHolder.getRequest().getSession().getId()+key;
        log.info("get:"+sessionkey);
        return (String) RequestHolder.getRequest().getSession().getAttribute(sessionkey);
    }

    @Override
    public void remove(String key) {
        String sessionkey = RequestHolder.getRequest().getSession().getId()+key;
        log.info("remove:"+sessionkey);
        RequestHolder.getRequest().getSession().removeAttribute(sessionkey);
    }

    @Override
    public void set(String key, String value) {
        String sessionkey = RequestHolder.getRequest().getSession().getId()+key;
        log.info("set:"+sessionkey);
        RequestHolder.getRequest().getSession().setAttribute(sessionkey, value);
    }

}

经过以上简单的设置,URule的基于Springboot+Redis Session共享的服务端节点配置就完成了,根据需要配合负载均衡器,一个服务端集群就搭建完成了。

results matching ""

    No results matching ""