我有一个带有一个主服务器和两个从服务器的Elasticache设置。我仍然不确定如何传递主从RedisURI列表以构建StatefulRedisMasterSlaveConnection
用于LettuceConnectionFactory
。我只看到对具有单个主机和端口的标准配置的支持。
LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE).build();
LettuceConnectionFactory factory = new LettuceConnectionFactory(SettingsUtils.standaloneConfiguration(),configuration);
我知道在为Redis主/从配置Spring Data Redis时会遇到类似的问题
但我认为它不适用于ElastiCache主/从设置,因为目前上述代码将尝试使用MasterSlaveTopologyProvider来发现从IP。但是,从属IP地址不可访问。那么,配置Spring Data Redis以使其与主/从ElastiCache兼容的正确方法是什么?在我看来,LettuceConnectionFactory需要接受endpoint列表并使用StaticMasterSlaveTopologyProvider才能工作。
目前,Spring Data Redis不支持提供endpoint的静态主/从。我开了一张罚单来支持这一点。
您可以通过子类化LettuceConnectionFactory
、创建自己的配置和LettuceConnectionFactory
来自己实现此功能。
您可以从以下内容开始:
public static class MyLettuceConnectionFactory extends LettuceConnectionFactory {
private final MyMasterSlaveConfiguration configuration;
public MyLettuceConnectionFactory(MyMasterSlaveConfiguration standaloneConfig,
LettuceClientConfiguration clientConfig) {
super(standaloneConfig, clientConfig);
this.configuration = standaloneConfig;
}
@Override
protected LettuceConnectionProvider doCreateConnectionProvider(AbstractRedisClient client, RedisCodec<?, ?> codec) {
return new ElasticacheConnectionProvider((RedisClient) client, codec, getClientConfiguration().getReadFrom(),
this.configuration);
}
}
static class MyMasterSlaveConfiguration extends RedisStandaloneConfiguration {
private final List<RedisURI> endpoints;
public MyMasterSlaveConfiguration(List<RedisURI> endpoints) {
this.endpoints = endpoints;
}
public List<RedisURI> getEndpoints() {
return endpoints;
}
}
您可以在此要点中找到所有代码,而不是在此处发布所有代码,因为这将是一堵代码墙。
AWS和莴苣有了进一步的改进,使支持主/从变得更加容易。
AWS最近的一个改进是,它为Redis启动了读卡器endpoint,在副本之间分配负载:Amazon ElastiCache为Redis启动了读卡器endpoint。
因此,使用Spring Data Redis连接到Redis的最佳方式是使用Redis集群的主要endpoint(主endpoint)和读取器endpoint(用于副本)。
您可以从AWS控制台获取它们。这是一个示例代码:
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.readFrom(ReadFrom.SLAVE_PREFERRED)
.build();
RedisStaticMasterReplicaConfiguration redisStaticMasterReplicaConfiguration =
new
RedisStaticMasterReplicaConfiguration(REDIS_CLUSTER_PRIMARY_ENDPOINT, redisPort);
redisStaticMasterReplicaConfiguration.addNode(REDIS_CLUSTER_READER_ENDPOINT, redisPort);
redisStaticMasterReplicaConfiguration.setPassword(redisPassword);
return new LettuceConnectionFactory(redisStaticMasterReplicaConfiguration, clientConfig);
}
我一直在使用Lettuce作为Redis客户端与AWS Elasticache进行对话。我目前使用的特定配置是带有预定义节点地址的静态主/从配置。最近,主节点发生了故障,启动了故障转移过程,最终导致所有应用程序写入请求失败,出现以下错误:
我正在尝试将ElastiCache设置为与Java应用程序一起使用。我的设置基于以下文档:https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/BestPractices.html Java(8)应用程序运行的EC2实例位于专有网络中。我在VPC和非VPC中都尝试了ElastiCache实例。然而,我总是, 如果我自己在EC2
> 难道从詹金斯没有像主詹金斯那样安装和启动吗?我假设我将以同样的方式安装一个主Jenkins和另一个从Jenkins,然后主Jenkins将控制从Jenkins例如通过ssh?所以我不能通过GUI查看奴隶詹金斯? 我考虑在另一个VM上添加从Jenkins的原因是因为VM包含我们的应用服务器(许多测试环境)。从master Jenkins部署和启动/停止应用程序服务器是一个难题,因为master
我是AWS-SDK的新手,我正在EC2实例上运行一个node.js应用程序。 我正在尝试在node.js应用程序中使用ElastiCache-Redis。但是,我找不到ElastiCache的API来进行基本的Redis调用。下面的url没有提供任何Redis命令。 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ElastiCache
问题内容: 使用Lettuce,我们如何配置运行在主机x上的6379端口上的Spring Data Redis和运行在相同或不同主机上的6380端口上的slave? 问题答案: 该功能将包含在即将发布的Spring Data Redis 2.1版本中。您将配置类似于: Lettuce从静态(不由Redis Sentinel管理)设置中自动发现主服务器和从服务器。
我使用Mule ESB来设计一个过程,通过这个过程可以向一个主题发布消息。订阅者将收听主题并接收消息。每个用户对消息的反应不同。这里的目标是能够从HTTP向主题发送测试消息,以测试订阅者。 下面是如何配置JMS连接: 这是流程: 当我运行测试时,我得到以下错误: 任何建议将不胜感激。 罗斯