Hazelcast:使用Java进行设置


我们将继续进行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