• springcloud nacos和eureka


    准备工作  一个查看  一个添加

    添加如下

    @RestController
    @RequestMapping("/order")
    public class OrderController1 {
        @Autowired
        private OrderService orderService;
        //该类没有交予spring管理
        @Autowired
        private RestTemplate restTemplate;
        @GetMapping("/buy/{pid}/{num}")
        public String getById(@PathVariable Integer pid,@PathVariable Integer num){
            System.out.println("=============================购买开始=================================");
            Order order = new Order();
            order.setNumber(num);
    //        用户信息可以根据token从redis中获取
            order.setUid(1);
            order.setUsername("超哥");
            //需要设置订单中的商品信息
            //远程调用商品微服务  http协议restFul风格调用  适合微服务   TPC协议    RPC风格适合  SOA分布式
            Product product = restTemplate.getForObject("http://localhost:8081/product/getById/" + pid, Product.class);
            System.out.println("=================远程查询的商品结构=============="+product);
            order.setPid(product.getPid());
            order.setPname(product.getPname());
            order.setPprice(product.getPprice());
            orderService.saveOrder(order);
            return "下单成功";
        }

    1.下载nacos-serve在当前目录下搜索cmd就可以直接打开当前目录下的黑窗口输入startup.cmd -m standalone可以启动单例模式  默认为集群模式

    网页搜索路径为localhost:8848/nacos

    账号密码默认为nacos

    点击服务管理-在服务列表查询信息

    引入nacos依赖

    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    

    application.properties

    nacos注册中心  ip地址

    spring.cloud.nacos.discovery.server-addr=localhost:8848
    

    指定是否把该服务注册到注册中心  默认为true

    spring.cloud.nacos.discovery.register-enabled=false
    nacos注册名称---不能存在下划线 '_'
    spring.application.name=springcloud-product

    运行即可在注册中心 查看信息

    2.

    @Autowired
    private RestTemplate restTemplate;
     //根据名称获取对象实例
            List instances = discoveryClient.getInstances("springcloud-product");
            //获取第一个实例名称
            int v = (int) (Math.random() * instances.size());
            System.out.println(v);
           ServiceInstance serviceInstance = instances.get(v);
            serviceInstance.getHost();//主机ip
            serviceInstance.getPort();//主机端口号
            String path = serviceInstance.getUri().toString();//端口加id
           Product product = restTemplate.getForObject(path+"/product/getById/" + pid, Product.class);

    3.再开一个启动类

     测试会随机在两个端口号中出查询结果---人为手写负载均衡

    ribbon实现负载均衡  无需在家依赖  上个依赖中已经有了

    只需在著启动类中加

    //ribbon借助负载均衡的调用
    @LoadBalanced
    @SpringBootApplication
    @EnableFeignClients
    public class OrderApp {
        public static void main(String[] args) {
            SpringApplication.run(OrderApp.class,args);
        }
        @Bean
        //ribbon借助负载均衡的调用
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    

    @RestController
    @RequestMapping("/order")
    public class OrderController3 {
        @Autowired
        private OrderService orderService;
        //该类没有交予spring管理
        @Autowired
        private RestTemplate restTemplate;
    
    
        @GetMapping("/buy/{pid}/{num}")
        public String getById(@PathVariable Integer pid,@PathVariable Integer num){
            System.out.println("=============================购买开始=================================");
            Order order = new Order();
            order.setNumber(num);
    //        用户信息可以根据token从redis中获取
            order.setUid(1);
            order.setUsername("超哥");
            //restTemplate调用时必须使用  /服务提供者的名称/服务提供的资源路径
            Product product = restTemplate.getForObject("http://springcloud-product/product/getById/" + pid, Product.class);
            System.out.println("=================远程查询的商品结构=============="+product);
            order.setPid(product.getPid());
            order.setPname(product.getPname());
            order.setPprice(product.getPprice());
            orderService.saveOrder(order);
            return "下单成功";
        }
    }
    

    3.application.properties中加

    springcloud-product微服务名称   NFLoadBalancerRuleClassName微服务类

    springcloud-product.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

    会随机访问结果

    4.加openfign依赖

    
        org.springframework.cloud
        spring-cloud-starter-openfeign
    

    建一个接口

    //被调用的微微服务名称springcloud-product   代理类url= http://springcloud-product/product/getById/{pid}
    @FeignClient(value = "springcloud-product")
    public interface PeoductFeign {
        //微服务接口方法
        @GetMapping("/product/getById/{pid}")
        public Product getById(@PathVariable Integer pid);
    }

    默认不识别

    需要在启动类中加

    @EnableFeignClients开启注解

    然后去调用

    @Autowired
    private PeoductFeign peoductFeign;

    拿到product

    Product product = peoductFeign.getById(pid);

    5.eureka-server配置类

    1.加依赖

    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-server
    

    2.application.properties中加

    server.port=7000
    
    spring.application.name=eureka-server
    
    主机名
    eureka.instance.hostname=localhost
    
    
    #是否把eureka服务器注册到注册中心
    eureka.client.register-with-eureka=false
    
    #是否拉取
    eureka.client.fetch-registry=false
    #服务器地址
    eureka.client.service-url.defaultZone=localhost:7000/eureka

    建启动类

    @SpringBootApplication
    @EnableEurekaServer//开启eureka注解
    public class EurekaServiceApp {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServiceApp.class,args);
        }
    }、

    测试

    加依赖

    
        org.springframework.cloud
        spring-cloud-starter-netflix-eureka-client
    

    配置类修改访问地址

    eureka.client.service-url.defaultZone=localhost:7000/eureka
    
    #???????
    spring.application.name=eureka-product
  • 相关阅读:
    springCloud 微服务通过minio实现文件上传和文件下载接口
    使用tkinter开发GUI程序4 -- tkinter常见控件的特征属性(第二部分)
    Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART
    pytorch CV入门4-使用MobileNet解决视觉相关问题
    2-1-1.spring源码--BeanFactory
    【80天学习完《深入理解计算机系统》】第十六天 4.2 Y86-64的顺序实现
    分布式架构在云计算平台中的应用及优缺点
    (二十九)大数据实战——kafka集群节点服役与退役案例实战
    前端给后端发请求,后端如何知道是已经登录的人发的请求还是未登录的人发的请求?
    全双工物联网远程控制门禁设计方案
  • 原文地址:https://blog.csdn.net/weixin_65942614/article/details/126432122