JLupin in-memory queue implementation
Overview
Every microservice stores data in memory. Because repsonse from microservice may not be sent to same instance as the request, queue microservices are communicationg with each other, to keep data consistent.
Usage
You must change configuration for calling microserivce, main server, queue microservice and microservice with service defintion.
Calling microservice
You must setup queue delegator for sending task with localhost load balancer. To do so updated your Spring configuration with below beans configuration:
@Configuration
@ComponentScan({"com.jlupin.impl.microservice.samplenative"})
public class MicroserviceApplicationConfiguration {
@Bean
public JLupinLogger getJLupinLogger() {
return JLupinSystemContainer.getInstance().getJLupinLogger();
}
@Bean
public JLupinServiceRepository getJLupinServiceRepository() {
return JLupinClientUtil.generateServiceRepository(5000, JLupinServiceRepositoryType.INNER_MICROSERVICE, null,
new JLupinServiceRepositoryConnectionToServerConfiguration(), getJLupinLogger());
}
@Bean("jlrmcDelegator")
public JLupinDelegator getJLRMCDelegator() {
JLupinLoadBalancer jLupinPriorityLoadBalancer = JLupinClientUtil.generateLoadBalancer(getJLupinServiceRepository(), 3, 5000,
JLupinClientUtil.JLupinLoadBalancerAlgorithmType.PRIORITY, getJLupinLogger());
return JLupinClientUtil.generateLoadBalancerDelegator(PortType.JLRMC, jLupinPriorityLoadBalancer);
}
@Bean("queueDelegator")
public JLupinDelegator getQueueDelegator() {
JLupinLoadBalancer jLupinLocalhostLoadBalancer = JLupinClientUtil.generateLoadBalancer(getJLupinServiceRepository(), 3, 5000,
JLupinClientUtil.JLupinLoadBalancerAlgorithmType.LOCALHOST, getJLupinLogger());
return JLupinClientUtil.generateLoadBalancerDelegator(PortType.QUEUE, jLupinLocalhostLoadBalancer);
}
}
Important here is that the service repository instance is shared between all load balancers.
Main server
Update your main.yml file to setup load balancers for queue protocol:
[...]
PROCESS_MANAGER:
[...]
LOAD_BALANCER_SETTINGS:
[...]
QUEUE_PROTOCOL_SETTINGS:
ALGORITHM:
type: localhost
PROPERTIES:
changeServerIntervalInMillis: 5000
[...]
With this configuration load balancer will look for queue microservice only on localhost.
Queue microservice
Update your configuration.yml file to setup load balancers for queue protocol:
[...]
ENTRY_POINTS:
[...]
QUEUE:
[...]
LOAD_BALANCER_SETTINGS:
ALGORITHM:
type: localhost
PROPERTIES:
changeServerIntervalInMillis: 5000
repeatsAmount: 3
[...]
Microservice with service called by queue
Update your configuration.yml file to setup load balancers for queue protocol:
[...]
ENTRY_POINTS:
[...]
QUEUE:
[...]
LOAD_BALANCER_SETTINGS:
ALGORITHM:
type: localhost
PROPERTIES:
changeServerIntervalInMillis: 5000
repeatsAmount: 3
[...]
Storage type configuration
[...]
storageClassName: 'com.jlupin.impl.microservice.partofjlupin.asynchronous.storage.queue.impl.memory.JLupinMemoryQueueStorageImpl'
[...]
This implementation is enabled by default.
