flash网站模版,网站开发工程师好不好,wordpress 做管理系统,长沙网络工程学院文章目录概念基于ServiceDiscovery实现服务自动注册和发现Service:服务基本信息InstanceDetails:封装实例用过来保存到zk中ServiceProvider#xff1a;服务提供者ServiceConsumer#xff1a;服务消费者运行基于ServiceDiscovery、ServiceCache实现服务自动注册和发现Registry…
文章目录概念基于ServiceDiscovery实现服务自动注册和发现Service:服务基本信息InstanceDetails:封装实例用过来保存到zk中ServiceProvider服务提供者ServiceConsumer服务消费者运行基于ServiceDiscovery、ServiceCache实现服务自动注册和发现Registry服务注册Registry接口ZookeeperRegistry基于zk 实现服务注册发现ServerInfo注册信息ServiceProviderByCache服务提供者ServiceComsumerByCache服务发现者概念
学习文章https://blog.csdn.net/qq_34021712/article/details/82887942
基于ServiceDiscovery实现服务自动注册和发现
Service:服务基本信息
package com.demo.rpc.curator;import java.util.List;/*** author: weijie* Date: 2020/9/27 16:32* Description: Service:方法、方法描述、方法参数*/
public class Service {private String methodName;private String desc;private ListString params;public String getMethodName() {return methodName;}public void setMethodName(String methodName) {this.methodName methodName;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc desc;}public ListString getParams() {return params;}public void setParams(ListString params) {this.params params;}
}
InstanceDetails:封装实例用过来保存到zk中
package com.demo.rpc.curator;import java.util.HashMap;
import java.util.Map;public class InstanceDetails {//zk根节点路径public static final String ROOT_PATH /service;//该服务拥有哪些方法public MapString, Service services new HashMap();//服务描述private String serviceDesc;public InstanceDetails() {}public InstanceDetails(String serviceDesc, MapString, Service services) {this.services services;this.serviceDesc serviceDesc;}public static String getRootPath() {return ROOT_PATH;}public MapString, Service getServices() {return services;}public void setServices(MapString, Service services) {this.services services;}public String getServiceDesc() {return serviceDesc;}public void setServiceDesc(String serviceDesc) {this.serviceDesc serviceDesc;}
}
ServiceProvider服务提供者
package com.demo.rpc.curator;import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.x.discovery.*;
import org.apache.curator.x.discovery.details.JsonInstanceSerializer;import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;public class ServiceProvider {public static void main(String[] args) throws Exception {CuratorFramework client CuratorFrameworkFactory.newClient(127.0.0.1:2181,2000,2000, new ExponentialBackoffRetry(1000, 3));client.start();client.blockUntilConnected();//服务构造器ServiceInstanceBuilderInstanceDetails serviceInstanceBuilder ServiceInstance.builder();//该服务中所有接口MapString, Service services new HashMap();Service addOrderService new Service();addOrderService.setDesc(添加订单);addOrderService.setMethodName(addOrder);addOrderService.setParams(Arrays.asList(uid, createTime, sid, status));services.put(addOrder, addOrderService);//添加删除订单服务接口Service delOrderService new Service();delOrderService.setDesc(删除订单);delOrderService.setMethodName(delOrder);delOrderService.setParams(Arrays.asList(sid));services.put(delOrder, delOrderService);InstanceDetails payload new InstanceDetails(订单服务, services);//将服务添加到ServiceInstanceServiceInstanceInstanceDetails orderService serviceInstanceBuilder.address(127.0.0.1).port(8080).name(OrderService).payload(payload).uriSpec(new UriSpec({scheme}://{address}:{port})).build();//构建ServiceDiscovery用来做服务发现ServiceDiscoveryInstanceDetails serviceDiscovery ServiceDiscoveryBuilder.builder(InstanceDetails.class).client(client).serializer(new JsonInstanceSerializerInstanceDetails(InstanceDetails.class)).basePath(InstanceDetails.ROOT_PATH).build();//服务注册serviceDiscovery.registerService(orderService);serviceDiscovery.start();System.out.println(服务注册成功);//创建钩子方法正常关闭Runtime.getRuntime().addShutdownHook(new Thread(() - {try {serviceDiscovery.close();client.close();} catch (IOException e) {e.printStackTrace();}System.out.println(shutdown hook...);}));//保持服务运行状态ServiceProvider serviceProvider new ServiceProvider();synchronized (serviceProvider){serviceProvider.wait();}}}
ServiceConsumer服务消费者
package com.demo.rpc.curator;import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.x.discovery.ServiceDiscovery;
import org.apache.curator.x.discovery.ServiceDiscoveryBuilder;
import org.apache.curator.x.discovery.ServiceInstance;
import org.apache.curator.x.discovery.details.JsonInstanceSerializer;import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;public class ServiceConsumer {public static void main(String[] args) throws Exception {CuratorFramework client CuratorFrameworkFactory.newClient(127.0.0.1:2181, new ExponentialBackoffRetry(1000, 3));client.start();client.blockUntilConnected();//构建ServiceDiscovery用来做服务发现ServiceDiscoveryInstanceDetails serviceDiscovery ServiceDiscoveryBuilder.builder(InstanceDetails.class).client(client).basePath(InstanceDetails.ROOT_PATH).serializer(new JsonInstanceSerializerInstanceDetails(InstanceDetails.class)).build();serviceDiscovery.start();//模拟请求调用服务while (true) {CollectionServiceInstanceInstanceDetails orderServices serviceDiscovery.queryForInstances(OrderService);if (orderServices.size() 0) {System.out.println(当前没有发现服务);TimeUnit.SECONDS.sleep(10);continue;}for (ServiceInstanceInstanceDetails service : orderServices) {//获取请求的scheme 例如http://127.0.0.1:8080String uriSpec service.buildUriSpec();//获取服务的其他信息InstanceDetails payload service.getPayload();//服务描述String serviceDesc payload.getServiceDesc();//获取该服务下的所有接口MapString, Service allService payload.getServices();SetMap.EntryString, Service entries allService.entrySet();for (Map.EntryString, Service entry : entries) {System.out.println(serviceDesc uriSpec / service.getName() / entry.getKey() 该方法需要的参数为 entry.getValue().getParams().toString());}}System.out.println(---------------------);Thread.sleep(5 * 1000);}}}
运行 基于ServiceDiscovery、ServiceCache实现服务自动注册和发现
Registry服务注册Registry接口
package com.demo.rpc.curator;import org.apache.curator.x.discovery.ServiceInstance;import java.util.List;public interface RegistryT {void registerService(ServiceInstanceT service) throws Exception;void unRegisterService(ServiceInstanceT service) throws Exception;ListServiceInstanceT queryForInstances(String name) throws Exception;}
ZookeeperRegistry基于zk 实现服务注册发现
package com.demo.rpc.curator;import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.x.discovery.ServiceCache;
import org.apache.curator.x.discovery.ServiceDiscovery;
import org.apache.curator.x.discovery.ServiceDiscoveryBuilder;
import org.apache.curator.x.discovery.ServiceInstance;
import org.apache.curator.x.discovery.details.InstanceSerializer;
import org.apache.curator.x.discovery.details.JsonInstanceSerializer;import java.util.List;
import java.util.stream.Collectors;public class ZookeeperRegistryT implements Registry{private InstanceSerializer serializer new JsonInstanceSerializer(ServerInfo.class);private ServiceDiscoveryT serviceDiscovery;private ServiceCacheT serviceCache;private String ROOT /dubbo-demo;private String serviceName demoService;private String host;public ZookeeperRegistry(String host) {this.host host;}public void start() throws Exception{CuratorFramework client CuratorFrameworkFactory.newClient(this.host, new ExponentialBackoffRetry(1000, 5));client.start();serviceDiscovery ServiceDiscoveryBuilder.builder(ServerInfo.class).client(client).basePath(ROOT).serializer(serializer).build();serviceDiscovery.start();//监听zk节点信息变化方便后续的读取serviceCache serviceDiscovery.serviceCacheBuilder()//多个serviceName如何监听??.name(serviceName).build();serviceDiscovery.start();serviceCache.start();}Overridepublic void registerService(ServiceInstance service) throws Exception {serviceDiscovery.registerService(service);}Overridepublic void unRegisterService(ServiceInstance service) throws Exception {serviceDiscovery.unregisterService(service);}/*** param name* return 根据name查询缓存数据* throws Exception*/Overridepublic ListServiceInstance queryForInstances(String name) throws Exception {return serviceCache.getInstances().stream().filter(s - s.getName().equals(name)).collect(Collectors.toList());}
}
ServerInfo注册信息
package com.demo.rpc.curator;import java.io.Serializable;public class ServerInfo implements Serializable {private String host;private int port;public ServerInfo() {}public ServerInfo(String host, int port) {this.host host;this.port port;}public String getHost() {return host;}public void setHost(String host) {this.host host;}public int getPort() {return port;}public void setPort(int port) {this.port port;}Overridepublic String toString() {return ServerInfo{ host host \ , port port };}
}ServiceProviderByCache服务提供者
package com.demo.rpc.curator;import org.apache.curator.x.discovery.ServiceInstance;public class ServiceProviderByCache {public static void main(String[] args) throws Exception {ZookeeperRegistryServerInfo zookeeperRegistry new ZookeeperRegistry(127.0.0.1:2181);zookeeperRegistry.start();ServerInfo serverInfo new ServerInfo(127.0.0.1, 8080);zookeeperRegistry.registerService(ServiceInstance.builder().name(demoService).payload(serverInfo).build());synchronized (ServiceProviderByCache.class){ServiceProviderByCache.class.wait();}}}
ServiceComsumerByCache服务发现者
package com.demo.rpc.curator;import org.apache.curator.x.discovery.ServiceInstance;import java.util.List;public class ServiceComsumerByCache {public static void main(String[] args) throws Exception {ZookeeperRegistryServerInfo zookeeperRegistry new ZookeeperRegistry(127.0.0.1:2181);zookeeperRegistry.start();// while (true){ListServiceInstance serviceInstances zookeeperRegistry.queryForInstances(demoService);for (ServiceInstance serviceInstance : serviceInstances){System.out.println(serviceInstance.getPayload().toString());}
// }}}