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;

}

复制代码
相关推荐
m0_3807438733 分钟前
为 OpenAI 兼容接口配置教程
开发语言·python·node.js
凤山老林1 小时前
Spring Boot 3.x AOT 编译实战:从原理、踩坑到生产落地
java·spring boot·后端
博傅1 小时前
Spring 核心原理
java·后端·spring
yurenpai(27届找实习中)1 小时前
从零读懂 AI 智能客服(一):模块职责与 SSE 聊天链路(后端架构)
java·人工智能·架构·langchain4j
万邦科技Lafite1 小时前
阿里巴巴拍立淘按图搜索商品API返回值实践:提升用户购物满意度的关键措施
开发语言·api·开放api·电商开放平台·京东开放平台
陈皮波比茶1 小时前
Swagger
java
小闫BI设源码2 小时前
Elasticsearch面试必看:如何让客户端精准选择节点高效执行请求?
java·elasticsearch·面试宝典·深入解析
小小龙学IT2 小时前
Qt 6 跨平台开发完全指南:从信号槽机制到实际项目落地
开发语言·qt
leisoo80972 小时前
ig50数据落盘ClickHousevsTimescaleDBvsDuckDB实测对比 IG50免费开源股票数据API接口
开发语言·jvm·数据库·python·json
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 5 章 使用 Spring Boot 阅读笔记 9
java·spring boot·笔记