• SpringCloud之服务提供和服务调用的搭建


    pom文件:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.toov5</groupId>
      <artifactId>member</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.1.RELEASE</version>
    	</parent>
    	<!-- 管理依赖 -->
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Finchley.M7</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    	<dependencies>
    		<!-- SpringBoot整合Web组件 -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<!-- SpringBoot整合eureka客户端 -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    		</dependency>
    	</dependencies>
    	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/libs-milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
      
    </project>
    

     yml文件:

    ###服务启动端口号
    server:
      port: 8000
    ###服务名称(服务注册到eureka名称)  
    spring:
        application:
            name: app-toov5-member
    ###服务注册到eureka地址
    eureka:
      client:
        service-url:
        ##当前会员注册到eureka服务  地址+端口号 
               defaultZone: http://127.0.0.1:8100/eureka
                
    ###因为该应用为注册中心,不会注册自己   这里 这两个可以不写
        register-with-eureka: true
    ###是否需要从eureka上获取注册信息
        fetch-registry: true
    

      controller类

    package com.toov5.api.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MemberApiController {
        @RequestMapping("/getMember")
      public String getMember() {
            return "会员服务";
      }
    }

    启动类

    package com.toov5.api.app;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient   //注册到eureka
    public class AppMember {
       
        public static void main(String[] args) {
            SpringApplication.run(AppMember.class, args);
        }
        
    }  

     先启动eureka,再启动服务:

    上面Eureka会帮助生成地址~ 

    (通过获取服务名字 然后获取访问地址)

    服务调用:

    客户端调用工具  SpringCloud里面有rest  Spring boot帮助整合的,底层封装了Http Client  默认整合了ribbon负载均衡器

                                 feign(spring cloud里面的)  

    解决RestTemplate注册到spring boot 容器中 @bean 方式

    如果使用RestTemplate 方式以别名方式进行调用,依赖Ribbon负载均衡器   @LoadBalanced

    @LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力 

    yml:

    ###服务启动端口号
    server:
      port: 8001
    ###服务名称(服务注册到eureka名称)  
    spring:
        application:
            name: app-toov5-order
    ###服务注册到eureka地址
    eureka:
      client:
        service-url:
               defaultZone: http://localhost:8100/eureka
    
               
    ###因为该应用为注册中心,不会注册自己这里 这两个可以不写
    register-with-eureka: true ###是否需要从eureka上获取注册信息 fetch-registry: true

      controller

    package com.toov5.api.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class OrderController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping("/getOrder")
        // 订单服务调用会员服务
        public String getOrder() {
            // 一种直接调用,一种服务别名调用
    //        String result = restTemplate.getForObject("http://localhost:8000/getMember", String.class);
            String url ="http://app-toov5-order/getMember"; //使用别名去注册中心找对应服务调用地址
            String result = restTemplate.getForObject(url, String.class);
            System.out.println("订单服务调用会员服务result" + result);
            return result;
        }
    }

    启动类

    package com.toov5.api.controller;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class AppOrder {
      public static void main(String[] args) {
        SpringApplication.run(AppOrder.class, args);
    }
      //解决RestTemplate找不到问题  把restTemplate注册到Spring Boot容器中 如果要使用别名 必须加  @LoadBalanced
      @Bean
      @LoadBalanced
      RestTemplate restTemplate() {  
          return new RestTemplate();
      }
      
    }

    两个都启动后有两个服务了

    访问之,

     

    可以多启动几个Member服务,可以实现本地负载均衡哦~~轮询机制~

    启动,两个服务:

  • 相关阅读:
    不能初始化ps2020,因为意外的遇到文件尾
    关于在云服务器上邮箱等功能无法正常的解决方法|phpcmsv9
    WAMP环境配置|apache24配置|php7配置|MySQL8配置
    SAP(ABAP) ABAP内部外部数据转换常用function
    移动平台对 META 标签的定义
    JavaScript/Jquery:Validform 验证表单的相关属性解释
    android开发问题 Failed to pull selection 菜鸟记录
    下载android sdk更新包离线安装解决方案
    android:inputType常用取值
    访问IIS元数据库失败解决方法
  • 原文地址:https://www.cnblogs.com/toov5/p/9948769.html
Copyright © 2020-2023  润新知