Nacos注册/配置中心
2026/7/18 13:09:58 网站建设 项目流程

一、Nacos 注册/配置中心

文章目录

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

1. 服务注册

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

2. 服务发现

  1. 开启服务发现
@EnableDiscoveryClient//开启服务发现功能@SpringBootApplicationpublicclassProductMainApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProductMainApplication.class,args);}}
  1. 测试服务发现
    • 这里discoveryClient和nacosServiceDiscovery效果一样
@SpringBootTestpublicclassDiscoveryTest{@AutowiredDiscoveryClientdiscoveryClient;@AutowiredNacosServiceDiscoverynacosServiceDiscovery;@TestvoiddiscoveryClientTest(){//获取所有服务for(Stringservice:discoveryClient.getServices()){System.out.println("service = "+service);//获取ip+port//获取所有实例List<ServiceInstance>instances=discoveryClient.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);//获取ip+porttry{List<ServiceInstance>instances=nacosServiceDiscovery.getInstances(service);for(ServiceInstanceinstance:instances){System.out.println("ip; "+instance.getHost()+"; "+"port = "+instance.getPort());}}catch(Exceptione){e.printStackTrace();}}}}

3. 远程调用

  1. 配置RestTemplate
    • RestTemplate是Spring提供的组件,发送请求
    @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
@ConfigurationpublicclassProductServiceConfig{@Bean@LoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}
  • 直接拼写
    /**
  • 基于注解的负载均衡远程查询商品信息
  • @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;
}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询