【问题标题】:spring-redis can't connect to remote hostspring-redis 无法连接到远程主机
【发布时间】:2016-06-08 15:45:48
【问题描述】:

我有以下轮询 Redis 的骆驼:

                from("timer://pollredis?fixedRate=true&period=5")
                    // poll redis
                    .setHeader("CamelRedis.Command", constant("LPOP"))
                    .setHeader("CamelRedis.Key", constant("shipments"))
                    // from redis, it is a producer, fetch with .to() !
                    .to(redisUri)
                    //
                    .choice().when(simple("${in.body} == null")).stop().otherwise()
                    //
                    .to("direct:internal").end();


    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
    jedisConnectionFactory.afterPropertiesSet();

    RedisTemplate<?, ?> redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(jedisConnectionFactory);
    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    redisTemplate.afterPropertiesSet();

    SimpleRegistry registry = new SimpleRegistry();
    registry.put("redisTemplate", redisTemplate);

而且效果很好。但是,当我将 redisUri 从

redisUri = spring-redis://localhost:6379?redisTemplate=#redisTemplate

到

redisUri = spring-redis://[stuff].xavwv8.ng.0001.euw1.cache.amazonaws.com:6379?redisTemplate=#redisTemplate

我收到以下错误:

11:42:49.754 INFO  Failed delivery for (MessageId: ID-ip-10-12-22-168-43293-1465299763162-0-1 on ExchangeId: ID-ip-10-12-22-168-43293-1465299763162-0-2). On delivery attempt: 0 caught: org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool | org.apache.camel.util.CamelLogger.log(CamelLogger.java:159) [Camel (camel-1) thread #0 - timer://pollredis] 

我已经通过远程登录和使用 redis-cli 来检查我是否可以访问 elasticache。

我在连接到远程主机时遇到的 Could not get a resource from the pool 错误是什么?

我的本​​地 redis 和 elasticache redis 都运行 2.8.24。跑骆驼2.17.1。

【问题讨论】:

  • 我查看了this thread,这可能是版本问题。 camel-spring-redis 正在使用 spring-data-redis 1.6.4.RELEASE 和 jedis 2.7.3。另外,如果我删除 ?redisTemplate=#redisTemplate 部分它可以工作,但是没有 StringRedisSerializer :(

标签: spring redis apache-camel


【解决方案1】:

这是我的工作原理:

    JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
    jedisConnectionFactory.setHostName(redisHost);
    jedisConnectionFactory.setPort(Integer.parseInt(redisPort));
    jedisConnectionFactory.afterPropertiesSet();

    RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(jedisConnectionFactory);
    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    redisTemplate.afterPropertiesSet();

    SimpleRegistry registry = new SimpleRegistry();
    registry.put("redisTemplate", redisTemplate);

属性文件:

redisUri = spring-redis://notused?redisTemplate=#redisTemplate
redisHost = [stuff].xavwv8.ng.0001.euw1.cache.amazonaws.com
redisPort = 6379

骆驼路线和以前一样。

显然,当您使用连接工厂时,您无法将主机设置为稍后在 URI 中使用。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2016-12-20
    • 2016-11-27
    • 2017-09-14
    • 2011-09-03
    • 1970-01-01
    • 2020-07-31
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多