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;

}

复制代码
相关推荐
Yang9611几秒前
0.5 米超短盲区!鼎讯信通 GO-50PRO 光时域反射仪科普
开发语言·后端·golang
红辣椒...3 分钟前
codex+第三方模型
java·服务器·前端
不会C语言的男孩5 分钟前
C++ Primer Plus 第12章:类和动态内存分配
开发语言·c++
一个做软件开发的牛马13 分钟前
Java 继承与多态:从"是什么"到"能做什么"的设计思维
java·后端
不懂的浪漫22 分钟前
05|Netty ByteBuf 源码分析:为什么不用 Java ByteBuffer
java·netty
阿里嘎多学长27 分钟前
2026-05-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
wapicn9929 分钟前
API接口调试笔记:从注册到第一个数据返回,全流程详解
java·开发语言·python·lua
程序员阿明31 分钟前
flowable集成flowable及其运行示例spring boot后端
java·spring boot·后端
.千余34 分钟前
【Linux】 TCP进阶详解:字节流、粘包问题、异常情况与UDP完整对比2
linux·运维·c语言·开发语言·经验分享·笔记·php
geovindu35 分钟前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式