2026/4/6 7:56:25
网站建设
项目流程
专业番禺网站建设,北京学网站开发,国外jquery网站,做优化网站建设一、Nacos 注册/配置中心 文章目录一、Nacos 注册/配置中心1. 服务注册2. 服务发现3. 远程调用4. 负载均衡1. 服务注册
引入依赖
dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discoverydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency整合配置spring.application.nameservice-order server.port8000 spring.cloud.nacos.discovery.server-addr127.0.0.1:88482. 服务发现开启服务发现EnableDiscoveryClient//开启服务发现功能SpringBootApplicationpublicclassProductMainApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProductMainApplication.class,args);}}测试服务发现这里discoveryClient和nacosServiceDiscovery效果一样SpringBootTestpublicclassDiscoveryTest{AutowiredDiscoveryClientdiscoveryClient;AutowiredNacosServiceDiscoverynacosServiceDiscovery;TestvoiddiscoveryClientTest(){//获取所有服务for(Stringservice:discoveryClient.getServices()){System.out.println(service service);//获取ipport//获取所有实例ListServiceInstanceinstancesdiscoveryClient.getInstances(service);for(ServiceInstanceinstance:instances){System.out.println(ip; instance.getHost(); port instance.getPort());}}}TestvoidnacosServiceDiscoveryTest()throwsNacosException{for(Stringservice:nacosServiceDiscovery.getServices()){System.out.println(service service);//获取ipporttry{ListServiceInstanceinstancesnacosServiceDiscovery.getInstances(service);for(ServiceInstanceinstance:instances){System.out.println(ip; instance.getHost(); port instance.getPort());}}catch(Exceptione){e.printStackTrace();}}}}3. 远程调用配置RestTemplateRestTemplate是Spring提供的组件发送请求Configurationpublic class ProductServiceConfig {Bean public RestTemplate restTemplate(){ return new RestTemplate(); }}java /** * 远程查询商品信息 * param productId * return */ private Product getProductFromRemote(Long productId){ //1. 获取商品服务所在的所有机器IPport ListServiceInstance instances discoveryClient.getInstances(service-product); ServiceInstance serviceInstance instances.get(1); //远程url String url http://serviceInstance.getHost():serviceInstance.getPort()/product/productId; log.info(url url); //给远程发送请求 Product product restTemplate.getForObject(url, Product.class); return product; }4. 负载均衡RestTemplate添加LoadBalancedConfigurationpublicclassProductServiceConfig{BeanLoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}直接拼写/**基于注解的负载均衡远程查询商品信息param productIdreturn*/private Product getProductFromRemoteWithLoadBalancerAnnotation(Long productId){// 进阶 3 基于注解的负载均衡String url “http://service-product/product/”productId;//给远程发送请求 service-product 会被动态替换Product product restTemplate.getForObject(url, Product.class);return product;}