Je suis capable d'utiliser les services REDIS et RABBITMQ qui sont en mode pivotant.Pendant les services de liaison, je peux obtenir les informations d'identification et utiliser ces informations dans mon application .properties pour le projet de démarrage de printemps.Utilisation du service Redis et Rabbitmq de fonderie cloud pivotant en tant que service vcap dans l'application de démarrage au printemps
Mais cette configuration que j'utilise est codée en dur dans l'application.Properties Pour faire cette configuration dynamiquement, j'ai appris que nous pouvions utiliser les services vcap fournis par pivotal.
Vous souhaitez donc utiliser les informations d'identification d'exécution pour redis et rabbimq.
Mon code est ci-dessous pour la référence.
application.propeties
rabbitmq.host=hostname
rabbitmq.virtual-host=vhostanme
rabbitmq.username=username
rabbitmq.password=password
rabbit.mainqueue=abhi
rabbit.errorqueue=abc
redis.host=redishostname
redis.port=port
redis.password=password
classe Ma config:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Config {
static String rabbitMqHost;
static String rabbitMqVHost;
static String rabbitMqUsername;
static String rabbitMqPassword;
static String rabbitMqMainQueue;
static String rabbitMqErrorQueue;
static String redisHost;
static int redisPort;
static String redisPassword;
Config() {
}
public static String getRedisHost() {
return redisHost;
}
public static void setRedisHost(String redisHost) {
Config.redisHost = redisHost;
}
public static int getRedisPort() {
return redisPort;
}
public static void setRedisPort(int redisPort) {
Config.redisPort = redisPort;
}
public static String getRedisPassword() {
return redisPassword;
}
public static void setRedisPassword(String redisPassword) {
Config.redisPassword = redisPassword;
}
public static String getRabbitMqMainQueue() {
return rabbitMqMainQueue;
}
public static void setRabbitMqMainQueue(String rabbitMqMainQueue) {
Config.rabbitMqMainQueue = rabbitMqMainQueue;
}
public static String getRabbitMqErrorQueue() {
return rabbitMqErrorQueue;
}
public static void setRabbitMqErrorQueue(String rabbitMqErrorQueue) {
Config.rabbitMqErrorQueue = rabbitMqErrorQueue;
}
public static String getRabbitMqHost() {
return rabbitMqHost;
}
public static void setRabbitMqHost(String rabbitMqHost) {
Config.rabbitMqHost = rabbitMqHost;
}
public static String getRabbitMqVHost() {
return rabbitMqVHost;
}
public static void setRabbitMqVHost(String rabbitMqVHost) {
Config.rabbitMqVHost = rabbitMqVHost;
}
public static String getRabbitMqUsername() {
return rabbitMqUsername;
}
public static void setRabbitMqUsername(String rabbitMqUsername) {
Config.rabbitMqUsername = rabbitMqUsername;
}
public static String getRabbitMqPassword() {
return rabbitMqPassword;
}
public static void setRabbitMqPassword(String rabbitMqPassword) {
Config.rabbitMqPassword = rabbitMqPassword;
}
@Value("${rabbitmq.host}")
public void setRabbitMqHosts(String url) {
setRabbitMqHost(url);
}
@Value("${rabbitmq.virtual-host}")
public void setRabbitMqVHosts(String url) {
setRabbitMqVHost(url);
}
@Value("${rabbitmq.username}")
public void setRabbitUsernames(String url) {
setRabbitMqUsername(url);
}
@Value("${rabbitmq.password}")
public void setRabbitPasswords(String url) {
setRabbitMqPassword(url);
}
@Value("${rabbit.mainqueue}")
public void setRabbitMainQueues(String url) {
setRabbitMqMainQueue(url);
}
@Value("${rabbit.errorqueue}")
public void setRabbitErrorQueues(String url) {
setRabbitMqErrorQueue(url);
}
@Value("${redis.host}")
public void setRedisHosts(String url) {
setRedisHost(url);
}
@Value("${redis.port}")
public void setRedisPorts(int url) {
setRedisPort(url);
}
@Value("${redis.password}")
public void setRedisPasswords(String url) {
setRedisPassword(url);
}
}
Ma classe MessagesConsumer dans laquelle je me sers que conguration pour faire passer un message de la file d'attente rabbitmq et enregistrez-Redis:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.es.consumer.config.Config;
import com.rabbitmq.jms.admin.RMQConnectionFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;
@Component
public class MessagesConsumer {
@Autowired
JmsTemplate jmsTemplate;
final Logger logger = LoggerFactory.getLogger(MessagesConsumer.class);
Jedis jedis;
JedisShardInfo shardInfo;
@PostConstruct
public void init() {
shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort());
shardInfo.setPassword(Config.getRedisPassword());
jedis = new Jedis(shardInfo);
jedis.connect();
jedis.select(2);
}
@Bean
ConnectionFactory connectionFactory() {
RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
connectionFactory.setUsername(Config.getRabbitMqUsername());
connectionFactory.setPassword(Config.getRabbitMqPassword());
connectionFactory.setVirtualHost(Config.getRabbitMqVHost());
connectionFactory.setHost(Config.getRabbitMqHost());
return connectionFactory;
}
@SuppressWarnings("rawtypes")
@Scheduled(fixedRate = 1)
public void readQueueAndSaveData() {
// take message process it and save to redis as hmset
}}
Toute aide serait appréciable.
puis-je obtenir des dépendances pour @Bean public RabbitConnectionFactory rabbitFactory() { return connectionFactory(). RabbitConnectionFactory ("rabbit-servicename"); } Les dépendances j'ai essayé pour cela est: \t \t \t org.springframework.amqp \t \t \t printemps-lapin \t \t \t 1.6.8. \t \t –
mais je veux enregistrer les données dans redis comme hash en utilisant HMSET Mais je pense que le modèle redis ne supporte pas hmset. –
Les dépendances à utiliser. org.springframework.cloud ressort nuage cloudfoundry connecteur RedisTemplate peut soutenir HMSET. Je ne suis pas sûr et n'ai pas essayé, mais jetez un oeil à ce lien. http://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/connection/RedisHashCommands.html#hMSet-byte:A-java.util.Map- –