我们将继续进行Spring Boot项目,以设置一个简单的Hazelcast服务器和客户端。
首先,根据构建工具的类型,将依赖项添加到“ pom.xml”文件或“ build.gradle”中。
dependencies { implementation 'org.springframework.boot:spring-boot-starter' compile group: 'org.springframework', name: 'spring-web', version: '5.2.6.RELEASE' compile('com.hazelcast:hazelcast:3.7.5') compile('com.hazelcast:hazelcast-client:3.7.5') }
com.hazelcast:hazelcast是Hazelcast jar的核心,它添加了有关实用程序的功能,例如IMap,Hazelcast实例等。hazelcast-client是java本机库,用于创建hazelcast客户端以获取数据并将其放入缓存中。
Configurations:
我们可以使用XML或Java配置Hazelcast。由于我们使用的是弹簧靴,让我们继续第二种方法。
@Configuration public class HazelcastConfig { @Bean public Config configuration(){ Config config = new Config(); config.setInstanceName("hazelcast-instance"); MapConfig mapConfig= new MapConfig(); mapConfig.setName("configuration"); mapConfig.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE)); mapConfig.setEvictionPolicy(EvictionPolicy.LRU); mapConfig.setTimeToLiveSeconds(-1); config.addMapConfig(mapConfig); return config; } }
Controller:
配置完Hazelcast之后,让我们添加一个控制器来操作集群中的数据(执行CRUD)。
import org.springframework.web.bind.annotation.*; /** * @author Dheeraj Gupta */ @RestController @RequestMapping("/v1/data") public class HazelcastCRUDController { private static final Logger LOGGER = LogManager.getLogger(HazelcastCRUDController.class); @Autowired private HazelcastService hazelcastService; @PostMapping(value = "/create") public String createData(@RequestParam String key, @RequestParam String value) { hazelcastService.createData(key, value); return "Success"; } @GetMapping(value = "/getByKey") public String getDataByKey(@RequestParam String key) { return hazelcastService.getDataByKey(key); } @GetMapping(value = "/get") public IMap<String, String> getData() { return hazelcastService.getData(); } @PutMapping(value = "/update") public String updateData(@RequestParam String key, @RequestParam String value) { hazelcastService.update(key, value); return "Success"; } @DeleteMapping(value = "/delete") public String deleteData(@RequestParam String key) { hazelcastService.deleteData(key); return "Success"; }
Service Layer:
在这里,我们将添加HazelcastInstance接口,该接口有助于在Hazelcast缓存中执行CRUD。
/** * @author Dheeraj Gupta */ @Service public class HazelcastServiceImpl implements HazelcastService { private final HazelcastInstance hazelcastInstance; @Autowired HazelcastServiceImpl(HazelcastInstance hazelcastInstance) { this.hazelcastInstance = hazelcastInstance; } @Override public String createData(String key, String value) { IMap<String, String> map = hazelcastInstance.getMap("my-map"); map.put(key, value); return "Data is stored."; } @Override public String getDataByKey(String key) { IMap<String, String> map = hazelcastInstance.getMap("my-map"); return map.get(key); } @Override public IMap<String, String> getData() { return hazelcastInstance.getMap("my-map"); } @Override public String update(String key, String value) { IMap<String, String> map = hazelcastInstance.getMap("my-map"); map.set(key, value); return "Data is stored."; } @Override public String deleteData(String key) { IMap<String, String> map = hazelcastInstance.getMap("my-map"); return map.remove(key); }
实用程序(可选):
在这个项目中,我还添加了独立的实用程序,当您单独运行它们时,它们可以创建Hazelcast服务器和Hazelcast客户端。
Hazelcast服务器:
/** * @author Dheeraj Gupta */ public class Server { private static final Logger LOGGER = LogManager.getLogger(Server.class); @Autowired private Environment environment; public static void main(String[] args) { HazelcastInstance instance = Hazelcast.newHazelcastInstance(); Map<Long, String> map = instance.getMap("elements"); IdGenerator idGenerator = instance.getIdGenerator("id"); for (int i = 0; i < 10; i++) { map.put(idGenerator.newId(), "values"+i); } LOGGER.info("Map Components" , map); } }
您可以多次运行此类以创建多个节点。这些节点将自动加入它们并形成一个集群。
Hazelcast客户端:
这是一个独立的实用程序类,用于从群集中获取数据。
import java.util.Map; /** * @author Dheeraj Gupta */ public class Client { private static final Logger LOGGER = LogManager.getLogger(Client.class); public static void main(String[] args) { ClientConfig clientConfig = new ClientConfig(); clientConfig.getGroupConfig().setName("dev"); clientConfig.getGroupConfig().setPassword("dev-pass"); HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig); IMap<Long, String> map = client.getMap("elements"); for (Map.Entry<Long, String> entry : map.entrySet()) { LOGGER.info(String.format("Key: %d, Value: %s", entry.getKey(), entry.getValue())); } } }
配置网络:
默认情况下,Hazelcast使用多播来发现群集中的节点。我们还可以通过TCP / IP配置对环境的发现。我们可以设置端口并以编程方式添加机器成员。默认情况下,Hazelcast会从5701开始为其本身预订100个端口。在此文件中,我们还可以添加要创建的节点数,并且群集不保留所有端口。在此项目中,我使用了更多的默认网络配置,但未进行配置。
我们的Hazelcast集群和客户端已准备就绪。在上述项目中,虽然我使用Spring Boot配置和控制器在缓存上创建并执行CRUD,但我还创建了一些实用程序来创建独立的Java类来创建Hazelcast节点和客户端,从而可以降低Spring的依赖性。
同样,您可以在我的Github存储库中找到此代码:https : //github.com/dheerajgupta217/hazelcast-setup
原文链接:http://codingdict.com