I have developed different services based on Spring-boot, Spring-cloud, and microservices architecture, also I am using the following dependency as Redis-client
:
implementation 'io.lettuce:lettuce-core:6.1.5.RELEASE'
I have defined my RedisBean
in Spring as below:
@Configuration
public class RedisBean {
@Bean
public RedisClient redisClientFactory(AppConfig config) {
var client = RedisClient.create(config.getRedis());
client.setDefaultTimeout(Duration.ZERO);
return client;
}
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public StatefulRedisConnection<byte[], byte[]> redisConnectionFactory(RedisClient client) {
return client.connect(ByteArrayCodec.INSTANCE);
}
@Bean
public RedisCommands<byte[], byte[]> redisCommands(StatefulRedisConnection<byte[], byte[]> connection) {
return connection.sync();
}
}
I have SSO
and ACCOUNTING
services.
In my SSO
service when a user register, I will push the username in Queue
like this:
@Service
public class AccountingServiceImpl implements AccountingService {
private final RedisCommands<byte[], byte[]> redis;
private final AppConfig appConfig;
public AccountingServiceImpl(AppConfig appConfig, RedisCommands<byte[], byte[]> redis) {
this.redis = redis;
this.appConfig = appConfig;
}
@Override
public void requestCreateDefaultAccount(String username) {
redis.rpush(
appConfig.getCreateAccountQueueName().getBytes(StandardCharsets.UTF_8)
, username.getBytes(StandardCharsets.UTF_8)
);
}
}
Now in the ACCOUNTING
service, I want to regularly listen to the registered Queue
and whenever a username was pushed, I take it and create a default account for the user.
I have searched a lot but couldn't find a suitable solution for my requirements using io.lettuce:lettuce-core
library.
Any help would be appreciated!!