服务端集群搭建
当单个服务端节点无法满足当前业务吞吐量或者业务要求时,服务端将会采用集群方式对外提供服务。
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共享的服务端节点配置就完成了,根据需要配合负载均衡器,一个服务端集群就搭建完成了。