• SpringCloud服务的注册发现--------Eureka


    1,什么叫做服务的注册与发现

    服务的注册与发现基于注册中心,注册中心本身是一个服务,也相当于一个载体,其他服务的注册需要注册到这个注册中心上。

    注册:当服务器启动的时候,会将自己的服务器信息,通过别名的形式注册到之前已经启动的注册中心上面

    发现:在注册中心上面注册的服务,由注册中心共同管理,以该别名的方式去注册中心上获取到实际的服务通讯地址,让后在实现本地rpc调用远程

    2,搭建注册中心

        eureka注册中心:maven依赖

    <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>
            <!--SpringCloud eureka-server -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</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>
    View Code

       配置文件:127.0.0.1:8100 启动路径

    server:
      port: 8100
    eureka:
      instance:
      ###注册到eurekaip地址
        hostname: 127.0.0.1
      client:
        serviceUrl:
              defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
        ###因为自己是为注册中心,不需要自己注册自己
        register-with-eureka: false
        ###因为自己是为注册中心,不需要检索服务
        fetch-registry: false

        启动类:需要加上@EnableEurekaServer

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaApplication {
        public static void main(final String[] args) {
            SpringApplication.run(EurekaApplication.class, args);
        }
    }

    这样访问127.0.0.1:8100就可以进入eureka注册中心的web页面了,目前还没有服务注册上去。。。

    3,实现服务注册

    开始注册会员服务和订单服务:

    配置都一样:就是配置文件上的地址不同

    member,order 的maven依赖

    <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>
    View Code

    member的配置文件:name就是注册的别名,member的端口是8000,注册到注册中心上

    ###服务启动端口号
    server:
      port: 8000
    ###服务名称(服务注册到eureka名称)  
    spring:
        application:
            name: app-aiyuesheng-member
    ###服务注册到eureka地址
    eureka:
      client:
        service-url:
               defaultZone: http://localhost:8100/eureka
    ###需要注册到eureka
        register-with-eureka: true
    ###是否需要从eureka上获取注册信息
        fetch-registry: true

    orderr的配置文件:name就是注册的别名,member的端口是8001,注册到注册中心上

    ###服务启动端口号
    server:
      port: 8001
    ###服务名称(服务注册到eureka名称)  
    spring:
        application:
            name: app-aiyuesheng-order
    ###服务注册到eureka地址
    eureka:
      client:
        service-url:
               defaultZone: http://localhost:8100/eureka
    ###需要注册到eureka
        register-with-eureka: true
    ###是否需要从eureka上获取注册信息
        fetch-registry: true

    添加启动类:

    @SpringBootApplication
    @EnableEurekaClient
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }

    启动之后,两个服务都会注册到注册中心上了。。。

    4,实现服务发现(实现rpc远程调用)

    order 添加映射地址:

    @RestController
    public class IndexOrderController {
    
        @RequestMapping("/getOrder")
        public String getOrder(){
            return "获得订单成功";
        }
        
    }

    member 添加映射地址,去调用order 服务:

    @RestController
    public class IndexMemberController {
    
        // 封装了http方法,显得更加的优雅
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping("/getOrder")
        public void getOrder() {
            // url会在eureka注册中心上通过别名进行查找,restTemplate通过别名来找服务,是依赖ribbon,所以@LoadBalanced要在RestTemplate初始化要加上
            String orderUrl = "http://app-aiyuesheng-order/getOrder";
            String res = restTemplate.getForObject(orderUrl, String.class);
            System.out.println("rpc远程调用服务成功");
            System.out.println(res);
        }
    }

    通过RestTemplate 去实现httpClient 的功能,即rpc 远程调用,因为RestTemplate是依赖客户端负载均衡器Ribbon的,所以在将RestTemplate注入到Spring容器中的时候,需要加上注解@LoadBalanced

    将RestTemplate注入到Spring容器中:

    @SpringBootApplication
    @EnableEurekaClient
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    
        // 注册到spring容器中
        @Bean
        // 开启负载均衡
        @LoadBalanced
        RestTemplate restTemplate() {
            return new RestTemplate();
        }
    
    }

    访问:127.0.0.1:8000/getOrder 这是会员的入口,能够进入到order 服务的接口。。。。。

  • 相关阅读:
    序列化
    python_模块与包
    python_常用内置模块
    python_生成器
    python_文件操作
    你好,mysql
    2017年12月20日 内置对象
    2017年12月17日 ASP.NET 12个表单元素&&简单控件/复合控件
    2017年12月16日 ASP.NET基本用法
    2017年12月14日 LinQ高级查&&Asp.net WebForm Asp.net MVC
  • 原文地址:https://www.cnblogs.com/pickKnow/p/11381764.html
Copyright © 2020-2023  润新知