zoukankan      html  css  js  c++  java
  • java环境 服务注册发现Eureka组件

    springcloud下单机版的Eureka使用

    • 服务注册中心
    • 服务提供者
    • 服务消费者

    Eureka 服务注册发现中心配置

    1、pom文件需要添加的依赖
        <dependencies>
            <!--spring cloud Eureka Server 启动器 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    <!--spring-cloud依赖(注意和springboot版本的兼容)-->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    注意spring-cloud-dependencies和springboot版本的兼容

    2、application.properties下配置Eureka的配置属性
    # 设置spring应用命名,可以自定义,非必要
    spring.application.name=eureka-server
    # 设置Eureka Server WEB控制台端口,自定义
    server.port=8761
    #是否将自己注册到Eureka-Server中,默认的为true(服务器自己就不注册自己了)
    eureka.client.register-with-eureka=false
    #是否从Eureka-Server中获取服务注册信息,默认为true
    eureka.client.fetch-registry=false
    
    3、启动类配置,添加 @EnableEurekaServer 注解
    @EnableEurekaServer
    @SpringBootApplication
    public class SpringCloudEurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudEurekaServerApplication.class,args);
        }
    }
    

    访问地址 http://localhost:8761/ 出现如下图显示配置成功

    4、注册中心的安全认证(如果可以任意访问的话,那么其安全性太低)

    1、添加依赖

            <!--安全认证依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
    

    引入依赖后后默认认证,再次访问 注册服务中心会要求登录

    秘密是随机生成的UUID,启动时会显示在控制台。默认用户名是user

    用户名和密码也可以在application.properties配置文件中配置

    #安全验证
    spring.security.user.name=liang
    spring.security.user.password=123456
    

    如果要禁用安全认证,可以在启动类中添加exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}

    @EnableEurekaServer
    @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
    public class Springcloud01EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(Springcloud01EurekaServerApplication.class, args);
        }
    
    }
    

    security安全认证存在跨站调用问题,不然服务提供者和消费者无法跨站调用。

    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().ignoringAntMatchers("/eureka/**");
            super.configure(http);
        }
    }
    

    Eureka 服务提供者配置

    1、pom文件需要添加的依赖
    <dependencies>
            <!--Eureka 提供者要引入的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <!--webmvc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--集成 Swagger2-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.7.0</version>
            </dependency>
            <!--集成 Swagger UI-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.7.0</version>
            </dependency>
        </dependencies>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    提供接口服务,所以顺便把swagger的依赖也引入了

    2、在apiController包下添加了一个StudentController
    @Api(tags = "学生管理相关接口")
    @RequestMapping(value = "/student",method = {RequestMethod.GET})
    @RestController
    public class StudentController {
    
        @ApiOperation("根据id查询用户的接口")
        @RequestMapping("/get/{id}")
        public String getName(@PathVariable("id") Integer studentId){
            System.out.println("打印获取参数:"+studentId);
            return "打印获取参数:"+studentId;
        }
    }
    
    3、在config包下建一个swaggerConfig配置类

    注意要添加上@EnableSwagger2注解,不让访问swagger页面会弹出一个alert错误

    @Configuration
    @EnableSwagger2 //启用 Swagger2
    public class swaggerConfig {
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.liang.springcloud02eurekaprovider.apiController"))
                    .paths(PathSelectors.any())
                    .build().apiInfo(new ApiInfoBuilder()
                            .title("SpringBoot整合Swagger")
                            .description("SpringBoot整合Swagger,详细信息......")
                            .version("1.0")
                            .license("The Apache License")
                            .licenseUrl("http://www.baidu.com")
                            .build());
        }
    
    }
    
    
    4、配置Eureka 客户端注册 (确认以上的swagger和接口能正常访问)

    启动类中添加@EnableEurekaClient 注解

    @EnableEurekaClient
    @SpringBootApplication
    public class Springcloud02EurekaProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(Springcloud02EurekaProviderApplication.class, args);
        }
    }
    
    5、在application.properties(或yaml文件)中配置 Eureka的配置信息

    提供者的应用名称必填,服务中心的应用名称可以不填

    # 定义SpringBoot应用的名称,建议必须提供。在SpringCloud中,对服务的最大粒度的管理是使用应用命名的
    # 最好是一个应用一个名称,在消费者角色开发的时候,比较容易查找Provider
    spring.application.name=eureka-provider
    server.port=8001
    eureka.client.register-with-eureka=true
    eureka.client.fetch-registry=true
    
    #配置Eureka Server的地址信息,如果是Eureka Server集群,多个节点使用逗号','分割。
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    #设置注册跳转地址
    eureka.instance.status-page-url-path=/swagger-ui.html
    
    6、服务提供者安全认证访问(如果注册中心中配置了认证访问)

    defaultZone 格式http://用户名:密码@地址:端口/eureka/

    #配置Eureka Server的地址信息,如果是Eureka Server集群,多个节点使用逗号','分割。
    # 如果Eureka Server 中用了安全认证组件,需要使用安全认证语法。
    #eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    eureka.client.service-url.defaultZone=http://liang:123456@localhost:8761/eureka/
    

    Eureka 服务消费者配置

    1、pom文件需要添加的依赖
    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
    2、添加一个控制器调用执行消费
    • 两种执行方法
      一个是获取提供者实例结合(可能是一个)DiscoveryClient
      一个是选择提供者实例 LoadBalancerClient
    @RestController
    public class IndexController {
    
        @Autowired
        private RestTemplate restTemplate;
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplateBuilder().build();
        }
    
        @Autowired
        DiscoveryClient discoveryClient;
    
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
        @GetMapping("/consumer/{id}")
        private String getInfo(@PathVariable("id") int id){
            // 由于查询到的服务列表是一个集合 可能是集合化部署 集合中每一项就是一个实例
            List<ServiceInstance> provider = discoveryClient.getInstances("eureka-provider-01");
            for(ServiceInstance serviceInstance : provider){
                String host= serviceInstance.getHost();
                Integer port= serviceInstance.getPort();
                StringBuilder sb=new StringBuilder();
                sb.append("http://");
                sb.append(host);
                sb.append(port);
                sb.append("/student/get");
                sb.append("/"+id);
    
                System.out.println("格式拼接:"+sb.toString());
                System.out.println(serviceInstance.toString());
    
                String geturlInfo=restTemplate.getForObject(sb.toString(),String.class);
                System.out.println("获取提供内容:"+geturlInfo);
            }
            return "执行ID:"+id;
        }
    
        @GetMapping("/consumer2/{id}")
        private String getInfo2(@PathVariable("id") int id){
            ServiceInstance serviceInstance= loadBalancerClient.choose("eureka-provider-01");
            String host= serviceInstance.getHost();
            Integer port= serviceInstance.getPort();
            StringBuilder sb=new StringBuilder();
            sb.append("http://");
            sb.append(host);
            sb.append(port);
            sb.append("/student/get");
            sb.append("/"+id);
    
            System.out.println("格式拼接:"+sb.toString());
            System.out.println(serviceInstance.toString());
    
            String geturlInfo=restTemplate.getForObject(sb.toString(),String.class);
            System.out.println("获取提供内容:"+geturlInfo);
    
            return "执行ID:"+id;
        }
    
    }
    
    3、application.properties中配置Eureka信息

    消费者可以不注册到服务中心

    spring.application.name=eureka-consumer
    server.port=8080
    # 消费者可以不注册到服务中心
    eureka.client.register-with-eureka=false
    eureka.client.fetch-registry=false
    
    #配置Eureka Server的地址信息,如果是Eureka Server集群,多个节点使用逗号','分割。
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    
    4、启动类添加@EnableDiscoveryClient 注解
    @EnableDiscoveryClient
    @SpringBootApplication
    public class Springcloud03EurekaConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(Springcloud03EurekaConsumerApplication.class, args);
        }
    
    }
    
    5、消费者安全认证访问(如果注册中心中配置了认证访问)

    defaultZone 格式http://用户名:密码@地址:端口/eureka/

    #配置Eureka Server的地址信息,如果是Eureka Server集群,多个节点使用逗号','分割。
    #eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    eureka.client.service-url.defaultZone=http://liang:123456@localhost:8761/eureka/
    
    依次启动 注册中心、服务提供者、服务消费者。执行消费者中的方法。
  • 相关阅读:
    思达BI软件Style Intelligence实例教程—食品平均价格变动情况分析
    思达BI软件Style Intelligence实例教程—原盐产量分析
    思达BI软件Style Intelligence实例教程—综合能源分析
    思达BI软件Style Intelligence实例教程—交通事故分析
    思达BI软件Style Intelligence实例教程—科技经费投入情况分析
    思达BI软件Style Intelligence实例教程—某高校录取情况分析
    80端口被系统占用,无法kill
    面试题目: PHP 有哪些优缺点?
    面试题目: 获取服务器IP和客户端IP
    Wordpress 忘记密码怎么办?
  • 原文地址:https://www.cnblogs.com/songl/p/14087336.html
Copyright © 2011-2022 走看看