Nacos注册/配置中心

一、Nacos 注册/配置中心

文章目录

  • [一、Nacos 注册/配置中心](#一、Nacos 注册/配置中心)
    • [1. 服务注册](#1. 服务注册)
    • [2. 服务发现](#2. 服务发现)
    • [3. 远程调用](#3. 远程调用)
    • [4. 负载均衡](#4. 负载均衡)

1. 服务注册

  • 引入依赖
xml 复制代码
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  
</dependency>
  • 整合配置
properties 复制代码
spring.application.name=service-order  
server.port=8000  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

2. 服务发现

  1. 开启服务发现
java 复制代码
@EnableDiscoveryClient  //开启服务发现功能  
@SpringBootApplication  
public class ProductMainApplication {  
  
    public static void main(String[] args) {  
        SpringApplication.run(ProductMainApplication.class, args);  
    }  
}
  1. 测试服务发现
    • 这里discoveryClient和nacosServiceDiscovery效果一样
java 复制代码
@SpringBootTest  
public class DiscoveryTest {  
  
    @Autowired  
    DiscoveryClient discoveryClient;  
  
    @Autowired  
    NacosServiceDiscovery nacosServiceDiscovery;  
  
    @Test  
    void discoveryClientTest(){  
        //获取所有服务  
        for (String service : discoveryClient.getServices()) {  
            System.out.println("service = " + service);  
            //获取ip+port  
            //获取所有实例  
            List<ServiceInstance> instances = discoveryClient.getInstances(service);  
            for (ServiceInstance instance : instances) {  
                System.out.println("ip; "+instance.getHost()+"; "+"port = " + instance.getPort());  
            }  
        }  
    }  
  
    @Test  
    void nacosServiceDiscoveryTest() throws NacosException {  
        for (String service : nacosServiceDiscovery.getServices()) {  
            System.out.println("service = " + service);  
            //获取ip+port  
            try {  
                List<ServiceInstance> instances = nacosServiceDiscovery.getInstances(service);  
                for (ServiceInstance instance : instances) {  
                    System.out.println("ip; "+instance.getHost()+"; "+"port = " + instance.getPort());  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
}

3. 远程调用

  1. 配置RestTemplate

    • RestTemplate是Spring提供的组件,发送请求
    java 复制代码
    @Configuration  
     public class ProductServiceConfig {  
     	@Bean      
     	public RestTemplate restTemplate(){  
        	 return new RestTemplate();  
     	}  
     }
java 复制代码
/**  
* 远程查询商品信息  
* @param productId  
* @return  
*/  
private Product getProductFromRemote(Long productId){  
   //1. 获取商品服务所在的所有机器IP+port  
   List<ServiceInstance> 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添加@LoadBalanced
java 复制代码
@Configuration  
public class ProductServiceConfig {  
  
    @Bean  
    @LoadBalanced    public RestTemplate restTemplate(){  
        return new RestTemplate();  
    }  
}
  • 直接拼写

    java 复制代码
    /**  
  • 基于注解的负载均衡远程查询商品信息
  • @param productId
  • @return
    */

private Product getProductFromRemoteWithLoadBalancerAnnotation(Long productId){

// 进阶 3 :基于注解的负载均衡

String url = "http://service-product/product/"+productId;

//给远程发送请求 service-product 会被动态替换

Product product = restTemplate.getForObject(url, Product.class);

return product;

}

复制代码
相关推荐
钰衡大师3 分钟前
Activiti 7 工作流技术文档
java·数据库·spring boot
格林威16 分钟前
工业视觉检测:两大主流异常检测开源框架深度对比(PatchCore vs SPADE)
开发语言·人工智能·深度学习·数码相机·计算机视觉·视觉检测·工业相机
2zcode21 分钟前
基于Matlab元胞自动机模拟(CA)静态再结晶过程
开发语言·matlab·静态再结晶
dvjr cloi24 分钟前
Spring Framework 中文官方文档
java·后端·spring
研究点啥好呢25 分钟前
滴滴Go后端开发工程师面试题精选:10道高频考题+答案解析
java·开发语言·golang
Levin__NLP_CV_AIGC26 分钟前
py文件中文件复制方法
开发语言·python
yong999030 分钟前
EKF-SLAM在MATLAB上的仿真实现
开发语言·matlab
广州山泉婚姻33 分钟前
C语言三种基本程序结构详解
c语言·开发语言
ictI CABL35 分钟前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
上弦月-编程37 分钟前
【C语言】函数栈帧的创建与销毁(底层原理)
c语言·开发语言