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;

}

复制代码
相关推荐
Bs_MoneyMagnet5 分钟前
基于springboot+vue的生态果园采摘预约系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·毕业设计·计算机毕业设计
麻瓜code20 分钟前
【JUC】AQS enq() 自旋入队
java
Zenova EdgeOS25 分钟前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
Wang's Blog40 分钟前
Java框架快速入门: Spring Security+OAuth2之核心角色与授权流程
java·spring·github
hai_android1 小时前
Kotlin Flow combine 源码剖析:一个 Channel 如何优雅合并多条流
android·java·kotlin
caoerzhong1 小时前
JeeWMS 开源仓库管理系统权限与域验证解析:Java WMS 如何把数据权限管到仓、货主与人
java·python·开源·vue
君顾11 小时前
西安 24 小时自助健身房系统开发实战指南
java·开发语言·健身房
用户094248568031 小时前
第9章:OpenJDK堆分代与 Serial/Parallel GC 基础
java·jvm
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之RBAC与角色分层实践
java·网络·spring
caoerzhong1 小时前
JeeWMS 开源仓库管理系统多租户架构解析:一套 Java WMS 如何同时服务多个货主与多个仓库
java·架构·开源·vue