-
StackOverflow 文档
-
apache-camel 教程
-
Pub Sub 使用 Camel + Redis
-
ManagedCamel
public class ManagedCamel implements Managed {
public static final String REDIS_TEMPLATE = "redisTemplate";
public static final String LISTENER_CONTAINER = "listenerContainer";
public static final String REDIS_SERIALIZER = "redisSerializer";
private DefaultCamelContext camelContext;
private List<RouteBuilder> routes;
@Value("${redis.host}")
private String redisHost;
@Value("${redis.port}")
private int redisPort;
@Value("${redis.password}")
private String redisPassword;
public ManagedCamel(List<RouteBuilder> routes) throws Exception {
this.routes = routes;
}
@PostConstruct
private void postInit() throws Exception {
JndiRegistry registry = new JndiRegistry();
final StringRedisSerializer serializer = new StringRedisSerializer();
RedisTemplate<String, Object> redisTemplate = getRedisTemplate(serializer);
registry.bind(REDIS_TEMPLATE, redisTemplate);
RedisMessageListenerContainer messageListenerContainer = new RedisMessageListenerContainer();
registry.bind(LISTENER_CONTAINER, messageListenerContainer);
registry.bind(REDIS_SERIALIZER, serializer);
camelContext = new DefaultCamelContext(registry);
for (RouteBuilder routeBuilder : routes) {
camelContext.addRoutes(routeBuilder);
}
start();
}
private RedisTemplate<String, Object> getRedisTemplate(StringRedisSerializer serializer) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(serializer);
redisTemplate.setEnableDefaultSerializer(false);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
private RedisConnectionFactory redisConnectionFactory() {
final JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setHostName(redisHost);
jedisConnectionFactory.setPort(redisPort);
jedisConnectionFactory.setPassword(redisPassword);
jedisConnectionFactory.afterPropertiesSet();
return jedisConnectionFactory;
}
public void start() throws Exception {
camelContext.start();
}
public void stop() throws Exception {
camelContext.stop();
}
public ProducerTemplate createProducer() {
return camelContext.createProducerTemplate();
}
}