国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringCloud核心教程 | 第三篇:服務注冊與發現 Eureka篇

scq000 / 3427人閱讀

摘要:下一篇介紹基于的服務注冊與調用。服務提供者工程配置這里服務提供者是使用之前進階教程第三篇整合連接池以及監控改造而來,這里一樣的部分就不再重復說明,下面將說明新增的部分。

Spring Cloud簡介

Spring Cloud是一個基于Spring Boot實現的云應用開發工具,它為基于JVM的云應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等操作提供了一種簡單的開發方式。

Spring Cloud包含了多個子項目(針對分布式系統中涉及的多個不同開源產品),比如:Spring Cloud ConfigSpring Cloud NetflixSpring Cloud CloudFoundrySpring Cloud AWSSpring Cloud SecuritySpring Cloud CommonsSpring Cloud ZookeeperSpring Cloud CLI等項目。

微服務架構

“微服務架構”在這幾年非常的火熱,以至于關于微服務架構相關的開源產品被反復的提及(比如: netflixdubbo),Spring Cloud也因Spring社區的強大知名度和影響力也被廣大架構師與開發者備受關注。

那么什么是“微服務架構”呢?簡單的說,微服務架構就是將一個完整的應用從數據存儲開始垂直拆分成多個不同的服務,每個服務都能獨立部署、獨立維護、獨立擴展,服務與服務間通過諸如RESTful API的方式互相調用。

對于“微服務架構”,大家在互聯網可以搜索到很多相關的介紹和研究文章來進行學習和了解。也可以閱讀始祖Martin Fowler的《Microservices》(中文版翻譯點擊查看),本文不做更多的介紹和描述。

服務治理

在簡單介紹了Spring Cloud和微服務架構之后,下面回歸本文的主旨內容,如何使用Spring Cloud來實現服務治理。

由于Spring Cloud為服務治理做了一層抽象接口,所以在Spring Cloud應用中可以支持多種不同的服務治理框架,比如:Netflix EurekaConsulZookeeper。在Spring Cloud服務治理抽象層的作用下,我們可以無縫地切換服務治理實現,并且不影響任何其他的服務注冊、服務發現、服務調用等邏輯。

所以,下面我們通過Eureka這種種服務治理的實現來體會Spring Cloud這一層抽象所帶來的好處。
下一篇介紹基于Consul的服務注冊與調用。

Spring Cloud Eureka

首先,我們來嘗試使用Spring Cloud Eureka來實現服務治理。

Spring Cloud EurekaSpring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它為Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的注解,開發者就可以快速的在應用中配置一下常用模塊并構建龐大的分布式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。

下面,就來具體看看如何使用Spring Cloud Eureka實現服務治理,這里使用eureka-server為服務注冊中心工程、eureka-provider服務提供者工程、eureka-consumer服務消費者工程。

準備工作

環境:

windows
jdk 8
maven 3.0
IDEA
構建工程

首先構建父工程,引入父工程依賴:



    4.0.0
    
    
        cn.zhangbox
        spring-cloud-study
        1.0-SNAPSHOT
    
    
    cn.zhangbox
    spring-cloud-eureka
    pom
    1.0-SNAPSHOT
    
    
    
        eureka-server
        eureka-provider
        eureka-consumer
    
    

父工程取名為:spring-cloud-eureka
構建子工程,分別創建工程名為:eureka-servereureka-providereureka-consumer并在pom中加入以下依賴:



    4.0.0

    
        cn.zhangbox
        spring-cloud-eureka
        1.0-SNAPSHOT
    

    cn.zhangbox
    eureka-server
    1.0.0
    jar

    eureka-server
    Spring Cloud In Action

    
        UTF-8
        1.8
    

    
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        
        
    

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.SR1
                pom
                import
            
        
    
    

    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
    



    4.0.0

    
        cn.zhangbox
        spring-cloud-eureka
        1.0-SNAPSHOT
    

    cn.zhangbox
    eureka-provider
    0.0.1-SNAPSHOT
    jar

    eureka-provider
    this project for Spring Boot

    
        UTF-8
        UTF-8
        1.8
        
        3.4
        1.10
        1.2.0
        1.16.14
        1.2.41
        1.1.2
    

    
        
        
            aliyunmaven
            http://maven.aliyun.com/nexus/content/groups/public/
        
    

    

        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            ${mybatis-spring-boot.version}
        
        

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

        
        
            org.springframework.boot
            spring-boot-starter-web
        
        

        
        
            io.springfox
            springfox-swagger2
            2.6.1
        
        
            io.springfox
            springfox-swagger-ui
            2.6.1
        
        

        
        
            mysql
            mysql-connector-java
            runtime
        
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        

        
        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
            commons-codec
            commons-codec
            ${commons-codec.version}
        
        

        
        
            com.alibaba
            fastjson
            ${fastjson.version}
        
        

        
        
            com.alibaba
            druid-spring-boot-starter
            ${druid.version}
        
        

        
        
            org.projectlombok
            lombok
            ${lombok.version}
        
        
    

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.SR1
                pom
                import
            
        
    
    

    
        eureka-provider
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
        
    



    4.0.0

    
        cn.zhangbox
        spring-cloud-eureka
        1.0-SNAPSHOT
    

    cn.zhangbox
    eureka-consumer
    0.0.1-SNAPSHOT
    jar

    eureka-consumer
    this project for Spring Boot

    
        UTF-8
        UTF-8
        1.8
        
        3.4
        1.10
        1.2.0
        1.16.14
        1.2.41
        1.1.2
    

    
        
        
            aliyunmaven
            http://maven.aliyun.com/nexus/content/groups/public/
        
    

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

        
        
            org.springframework.cloud
            spring-cloud-starter-feign
        
        

        
        
            org.springframework.boot
            spring-boot-starter-web
        
        

        
        
            io.springfox
            springfox-swagger2
            2.6.1
        
        
            io.springfox
            springfox-swagger-ui
            2.6.1
        
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        

        
        
            org.apache.commons
            commons-lang3
            ${commons-lang3.version}
        
        
            commons-codec
            commons-codec
            ${commons-codec.version}
        
        

        
        
            com.alibaba
            fastjson
            ${fastjson.version}
        
        

        
        
            org.projectlombok
            lombok
            ${lombok.version}
        
        
    

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.SR1
                pom
                import
            
        
    
    

    
        eureka-provider
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
        
    

工程構建完成。

服務注冊中心工程配置

首先:eureka-server工程下resource目錄下添加application.yml文件并加入以下配置:

#工程名稱
spring:
  application:
    name: eureka-server
#選擇哪一個環境的配置
#這里可以在每個環境配置redis,數據庫(mysql),消息(kafka)等相關的組件的配置
  profiles:
    active: dev
#配置eureka注冊中心
eureka:
  #server:
    #配置關閉自我保護模式
    #enableSelfPreservation: false
    #配置Eureka Server清理無效節點的時間間隔
    #eviction-interval-timer-in-ms: 4000
  instance:
    #配置與此實例相關聯的主機名,是其他實例可以用來進行請求的準確名稱
    hostname: eureka-server
    #顯示服務ip地址
    preferIpAddress: true
    #獲取服務的ip和端口
    instanceId: ${spring.cloud.client.ipAddress}:${server.port}
  client:
    #配置不將自己注冊到eureka注冊中心
    register-with-eureka: false
    #配置此客戶端不獲取eureka服務器注冊表上的注冊信息
    fetch-registry: false
    serviceUrl:
          #配置默認節點有信息,這里是獲取本機的ip和端口來實現,如果不配置,默認會找8761端口,這里配置的是1001端口,因此會報錯
          defaultZone: http://${spring.cloud.client.ipAddress}:${server.port}/eureka/
      
#文檔塊區分為三個---
---
server:
  port: 1001
spring:
  profiles: dev
#日志
logging:
  config: classpath:log/logback.xml
  path: log/eureka-server

#文檔塊區分為三個---
---
server:
  port: 1002
spring:
  profiles: test
#日志
logging:
  config: classpath:log/logback.xml
  path: usr/eureka-server/log/eureka-server

#文檔塊區分為三個---
---
server:
  port: 1003
spring:
  profiles: prod
#日志
logging:
  config: classpath:log/logback.xml
  path: usr/eureka-server/log/eureka-server

這里日志的配置不在詳細說明,不知道怎么配置可以參考這篇文章:
SpringBoot進階教程 | 第二篇:日志組件logback實現日志分級打印

其次:創建核心啟動類:

@EnableEurekaServer//加上此注解表示將此工程啟動后為注冊中心
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaServerApplication.class).web(true).run(args);
    }

}

最后:啟動項目
至此eureka注冊中心創建完成,瀏覽器輸入地址:http://localhost:1001/
可以看到如下頁面,表示服務啟動OK

這里這看到還沒有服務暴露出來,是因為還沒創建服務提供者工程。

服務提供者工程配置

這里服務提供者是使用之前SpringBoot進階教程 | 第三篇:整合Druid連接池以及Druid監控改造而來,這里一樣的部分就不再重復說明,下面將說明新增的部分。
首先:修改application.yml配置為如下:

#公共配置
server:
    port: 80
    tomcat:
      uri-encoding: UTF-8
spring:
  application:
      #服務名稱,更關鍵,使用feign進行服務消費將以此為依據
      name: eureka-provider
  #激活哪一個環境的配置文件
  profiles:
    active: dev
  #連接池配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    # 使用druid數據源
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 配置測試查詢語句
      validationQuery: SELECT 1 FROM DUAL
      # 初始化大小,最小,最大
      initialSize: 10
      minIdle: 10
      maxActive: 200
      # 配置一個連接在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 180000
      testOnBorrow: false
      testWhileIdle: true
      removeAbandoned: true
      removeAbandonedTimeout: 1800
      logAbandoned: true
      # 打開PSCache,并且指定每個連接上PSCache的大小
      poolPreparedStatements: true
      maxOpenPreparedStatements: 100
      # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,"wall"用于防火墻
      filters: stat,wall,log4j
      # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

#配置eureka獲取服務地址,這里使用的是本地注冊中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1001/eureka/
  #配置Swagger相關信息
  instance:
      prefer-ip-address: true
      instanceId: ${spring.cloud.client.ipAddress}:${server.port}
      status-page-url: http://${spring.cloud.client.ipAddress}:${server.port}/swagger-ui.html # ${server.port}為該服務的端口號

#mybatis
mybatis:
  # 實體類掃描
  type-aliases-package: cn.zhangbox.springboot.entity
  # 配置映射文件位置
  mapper-locations: classpath:mapper/*.xml
  # 開啟駝峰匹配
  mapUnderscoreToCamelCase: true

---
#開發環境配置
server:
  #端口
  port: 8080
spring:
  profiles: dev
  # 數據源配置
  datasource:
    url: jdbc:mysql://101.132.66.175:3306/student?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true
    username: root
    password: 123456
#日志
logging:
  config: classpath:log/logback.xml
  path: log/eureka-provider

---
#測試環境配置
server:
  #端口
  port: 80
spring:
  profiles: test
  # 數據源配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/eureka-provider?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true
    username: root
    password: 123456
#日志
logging:
  config: classpath:log/logback.xml
  path: /home/log/eureka-provider

---
#生產環境配置
server:
  #端口
  port: 8080
spring:
  profiles: prod
  # 數據源配置
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/eureka-provider?useUnicode=true&characterEncoding=utf8&useSSL=false&tinyInt1isBit=true
    username: root
    password: 123456
#日志
logging:
  config: classpath:log/logback.xml
  path: /home/log/eureka-provider

其次:config目錄下增加SwaggerConfig類加入以下代碼:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket userApi() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.zhangbox.eureka.provider.controller"))//過濾的接口,有這掃描才會看到接口信息
                .paths(PathSelectors.any())
                .build();
        return docket;
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("eureka服務端提供者接口平臺").description("服務相關數據接口")
                .termsOfServiceUrl("http://www.zhang.box.cn/").contact("技術開發部")
                .license("Licence Version 1.0").licenseUrl("#").version("1.0").build();
    }

}

這里如果不會使用swagger的整合可以參考這篇文章:
SpringBoot非官方教程 | 第十一篇:SpringBoot集成swagger2,構建優雅的Restful API

接著:創建核心啟動類:

@EnableDiscoveryClient //使用該注解將注冊服務到eureka
@SpringBootApplication
@MapperScan("cn.zhangbox.eureka.provider.dao")//配置mybatis接口包掃描
public class EurekaProviderApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(EurekaProviderApplication.class, args);
    }
}

最后:啟動項目
至此eureka-provider服務提供者創建完成,瀏覽器輸入地址:http://localhost:1001/
可以看到如下頁面,表示服務注冊OK

點擊Status下的ip后可以跳轉看到swagger的頁面并可是測試服務提供者的接口,如下:

服務消費者工程配置

這里構建的工程名為eureka-consumer,上文已經構建了工程但是沒有創建目錄,這里只需要在java目錄下創建configcontrollerservice,包即可,這里服務的消費是通過feign來進行服務調用的,后面會有專門以篇文章來講feign
首先:eureka-consumer工程下resource目錄下添加application.yml文件并加入以下配置:

#公共配置
server:
    port: 80
    tomcat:
      uri-encoding: UTF-8
spring:
  #服務名稱,更關鍵,使用feign進行服務消費將以此為依據
  application:
     name: eureka-consumer
  #激活哪一個環境的配置文件
  profiles:
    active: dev

#配置eureka獲取服務地址,這里使用的是本地注冊中心
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1001/eureka/
  #配置instance相關信息
  instance:
      prefer-ip-address: true
      instanceId: ${spring.cloud.client.ipAddress}:${server.port}
      status-page-url: http://${spring.cloud.client.ipAddress}:${server.port}/swagger-ui.html # ${server.port}為該服務的端口號

---
#開發環境配置
server:
  #端口
  port: 8081
spring:
  profiles: dev
#日志
logging:
  config: classpath:log/logback.xml
  path: log/eureka-consumer

---
#測試環境配置
server:
  #端口
  port: 8082
spring:
  profiles: test
#日志
logging:
  config: classpath:log/logback.xml
  path: /home/log/eureka-consumer

---
#生產環境配置
server:
  #端口
  port: 8083
spring:
  profiles: prod
#日志
logging:
  config: classpath:log/logback.xml
  path: /home/log/eureka-consumer

其次:config目錄下增加SwaggerConfig類加入以下代碼:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket userApi() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.zhangbox.eureka.consumer.controller"))//過濾的接口,有這掃描才會看到接口信息
                .paths(PathSelectors.any())
                .build();
        return docket;
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("eureka服務端消費者接口平臺").description("服務相關數據接口")
                .termsOfServiceUrl("http://www.zhang.box.cn/").contact("技術開發部")
                .license("Licence Version 1.0").licenseUrl("#").version("1.0").build();
    }

}

接著:service包下創建StudentConsumerService類并加入以下代碼:

@FeignClient(value = "eureka-provider")
public interface StudentConsumerService {

    /**
     * 查詢所有的學生信息
     *
     * @param sname
     * @param age
     * @return
     */
    @RequestMapping(value = "/student/list",method = RequestMethod.GET)
    String getStudentList(@RequestParam(value = "sname") String sname, @RequestParam(value = "age") Integer age);
}

然后:controller包下創建StudentConteroller并加入如下代碼:

@Controller
@RequestMapping("/student")
@Api(value = "eureka-consumer", description = "學生查詢接口")
public class StudentConteroller {
    private static final Logger LOGGER = LoggerFactory.getLogger(StudentConteroller.class);

    @Autowired
    StudentConsumerService studentService;

    /**
     * 查詢所有的學生信息
     *
     * @param sname
     * @param age
     * @param modelMap
     * @return
     */
    @ResponseBody
    @GetMapping("/consumer/list")
    public String list(
            @ApiParam(value = "學生姓名") @RequestParam(required = false) String sname,
            @ApiParam(value = "年齡") @RequestParam(required = false) Integer age,
            ModelMap modelMap) {
        String json = null;
        try {
            json = studentService.getStudentList(sname, age);
        } catch (Exception e) {
            e.printStackTrace();
            modelMap.put("ren_code", "0");
            modelMap.put("ren_msg", "查詢失敗===>" + e);
            LOGGER.error("查詢失敗===>" + e);
            json = JSON.toJSONString(modelMap);
        }
        return json;
    }
}

接著:創建核心啟動類:

@EnableFeignClients//開啟Feign調用接口
@EnableDiscoveryClient//開啟客戶端服務,沒有這個注解會報Feign找不到對應服務的錯誤
@SpringBootApplication
public class EurekaConsumerApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }
}

最后:啟動項目
至此eureka-consumer服務提供者創建完成,瀏覽器輸入地址:http://127.0.0.1:8081/swagger-ui.html
同樣也可以點擊eureka控制臺中ApplicationEUREKA-CONSUMERStatus下的ip后可以跳轉看到swagger的頁面并可是測試服務消費者的接口,可以看到如下頁面,并點擊try it out按鈕,返回了正確的學生信息數據

返回數據如下:

{
    "ren_code": "0",
    "ren_msg": "查詢成功",
    "studentList": [{
        "age": "17",
        "birth": "2010-07-22",
        "dept": "王同學學習成績很不錯",
        "sex": "1",
        "sname": "王同學",
        "sno": 1
    }, {
        "age": "17",
        "birth": "2010-07-22",
        "dept": "李同學學習成績很不錯",
        "sex": "1",
        "sname": "李同學",
        "sno": 2
    }]
}

以上就是spring cloud基于eurka實現分布式服務注冊與消費的整合流程,是不是很簡單,你也來小試牛刀一把吧。

寫在最后

歡迎關注喜歡、和點贊后續將推出更多的spring cloud教程,敬請期待。

源碼地址

SpringCloud核心教程 | 第三篇:服務注冊與發現 Eureka篇

歡迎關注我的微信公眾號獲取更多更全的學習資源,視頻資料,技術干貨!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71640.html

相關文章

  • 架構~微服務

    摘要:接下來繼續介紹三種架構模式,分別是查詢分離模式微服務模式多級緩存模式。分布式應用程序可以基于實現諸如數據發布訂閱負載均衡命名服務分布式協調通知集群管理選舉分布式鎖和分布式隊列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最簡單的 SpringCloud 教程 | 第九篇: 服務鏈路追蹤 (Spring Cloud Sleuth) 史上最簡單的 S...

    xinhaip 評論0 收藏0
  • 史上最簡單的SpringCloud教程 | : 服務消費者(Feign)

    摘要:一簡介是一個聲明式的服務客戶端,它使得寫服務變得更簡單。同時支持可插拔的編碼器和解碼器。對添加了支持,同時在中次用相同的。 轉載請標明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 上一篇文章,講述了通過restTemplate+ribbon去消費服務,這篇文章主要講述通過feign去消費服務。 一、Feign簡介 Feign是一個聲明式的...

    0x584a 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<