1. 程式人生 > >springCloud微服務學習總結

springCloud微服務學習總結

SpingCloud微服務學習總結

  1. 首先springCloud是基於springboot來構建的,應該先了解springboot的特徵。
  2. eureka用來管理服務register與discovery,構建microService比較簡單,只需要@EnableEurekaServer,@EnableEurekaClient兩註解。
  3. spingCloud的熔斷機制Circuit。
  4. 統一的服務例項監控軟體,@EnableHystrixDashboard
  5. 服務client的負載均衡Ribbon,RestTemplate底層通過Ribbon來實現load balance的訪問server。
  6. Zookeeper在springCloud中整合,通過apache Curator的開源client,Zookeeper能支援服務註冊與發現。但我只使用zookeeper的分散式configuration。

### 1. spingBoot簡單介紹

package com.calm.b;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context
.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.ImportResource; @Configuration @ComponentScan("com.calm.*") @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class
) @ImportResource(value = {"applicationContext.xml"}) @EnableAspectJAutoProxy public class BizApplication { /** * 程式的啟動入口 * * @param args */ public static void main(String[] args) { // SpringApplication.run(BizApplication.class, args); new SpringApplicationBuilder(BizApplication.class).web(true).run(args); } }

構建spingboot工程,只需要在所有package目錄最根層建立一個main方法class,配上@Configuration,@ComponentScan,@EnableAutoConfiguration註解就能夠啟動springBoot程式,@SpringBootApplication是前三個註解預設配置的。
1. @Configuration 代表該component是一個spring容器定義的配置bean。
2. @ComponentScan 代表spring容器需要掃表java元件包路徑範圍。預設是當前class所有在包位置。
3. @EnableAutoConfiguration 啟動自動獲取配置的開關,exclude是指可以在排除需要的configuration bean。

2. eureka的discovery與register

  1. @EnableEurekaServer 代表服務管理的服務方,在main class上添加註冊,參考例子cloud-eureka-server。
  2. @EnableEurekaClient 客戶端則使用這個註解,參考例子cloud-simple-service。
  3. server與client 的bootstrap.properties配置如下:
#service discovery url
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
  1. eureka客戶端與服務端之間互動應該知道其原理,EurekaClient 類是其主要元件,可以獲取server端的所有註冊資訊,例子程式碼:
@RequestMapping(value = "/monitor")
    public void getDishSetmealGroup(HttpServletRequest request, HttpServletResponse response)
            throws ServletRequestBindingException {
        InstanceInfo instanceInfo = discoveryClient.getNextServerFromEureka("cloudSimpleService", false);
        System.out.println(instanceInfo.getHealthCheckUrl());
        serviceUrl();
    }

    public String serviceUrl() {
        // discoveryClient.geti
        List<InstanceInfo> list = discoveryClient.getInstancesById("my-THINK:cloudSimpleService:8082");
        if (list != null && list.size() > 0) {
            System.out.println(list.get(0).getHomePageUrl());
        }
        Application application = discoveryClient.getApplication("cloudSimpleService");
        list = application.getInstances();
        if (list != null && list.size() > 0) {
            System.out.println(list.get(0).getHealthCheckUrl());
        }
        return null;
    }
<instanceId>my-THINK:cloudSimpleService:8082</instanceId>
<hostName>my-THINK</hostName>
<app>CLOUDSIMPLESERVICE</app>
<ipAddr>192.168.7.197</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8082</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
    <name>MyOwn</name>
</dataCenterInfo>

3. Circuit熔斷器例子

參考spring 官方文件

4. HystrixDashboard使用介紹

參考spring 官方文件

5. Ribbon負載均衡的例子

  1. 我們通過RestTemplate來構建負載均衡,@LoadBalanced 標誌
@Configuration
public class BeanConfiguration {

    @LoadBalanced
    @Bean
//  @Order()
    public RestTemplate restTemplate(){
        return new  RestTemplate();
    }
}
@Service("usserService")
public class UserService {

    @Resource
    private RestTemplate restTemplate;

    private static final Logger logger = LoggerFactory.getLogger(UserService.class);

    final String SERVICE_NAME = "cloudSimpleService";


//  @HystrixCommand(fallbackMethod = "fallbackSearchAll")
    public List<User>  searchAll() {
        logger.info("====================================");
        List<User> users=null;
        try{
            users=restTemplate.getForObject("http://" + SERVICE_NAME + "/user", List.class);
        }catch(Exception e){
            e.printStackTrace();
        }
        logger.info("====================================");
        return users;
    }


    public List<User>  searchAllTwo() {
        logger.info("====================================");
        List<User> users=null;
        try{
            users=restTemplate.postForObject("http://" + SERVICE_NAME + "/user",null, List.class);
            //restTemplate.exchange(url, method, requestEntity, responseType)
            //restTemplate.delete(url);
        }catch(Exception e){
            e.printStackTrace();
        }
        logger.info("====================================");
        return users;
    }

主要通spring.application.name=cloudSimpleService 名字+url來訪問具體的服務。

6. zookeeper分散式配置資訊整合。

  1. 這個只介紹zookeeper與springCloud整合的分散式配置。
  2. 分兩種配置基於服務例項之上的全域性配置,基於服務的自己配置。
  3. 基於zookeeper,zkui服務的的配置結構如下:

這裡寫圖片描述

這裡寫圖片描述

  1. 要注意zkui配置檔案node結構,

dev –代表自己的環境
– apps:customized – 所有appInstance配置
– cloudSimpleService –測試的服務應用
— —該app自己的屬性定義

#App Config Dashboard (ACD) dump created on :Wed Nov 02 15:09:00 CST 2016
/configurations/mind/dev/apps=foo=bar
/configurations/mind/dev/apps:customized=foo=bar
/configurations/mind/dev/apps:customized/customized=age=22222222222
/configurations/mind/dev/apps:customized/customized=foo=bar
/configurations/mind/dev/cloudSimpleService=foo=bar
/configurations/mind/dev/cloudSimpleService/customized=foo=bar
/configurations/mind/dev/cloudSimpleService/customized=password=1wswddewwpassword
/configurations/mind/dev/cloudSimpleService/customized=userName=user12345andrex
/configurations/mind/dev/cloudSimpleService/mysqldb=foo=bar
/configurations/mind/dev/tradeAnalyzer=andrexu2=11
/configurations/mind/dev/tradeAnalyzer=foo=bar
/configurations/mind/dev/tradeAnalyzer=testUserNode=12433
  1. 服務端的配置如下:
#service name
spring.application.name=cloudSimpleService

spring.profiles.active=dev,datasource,mail,customized
# zookeeper所有叢集address
spring.cloud.zookeeper.connectString=testzk1.shishike.com:2181,testzk2.shishike.com:2181,testzk3.shishike.com:2181
#是否開啟zookeeper使用
spring.cloud.zookeeper.config.enable=true
#zokkeeper配置的根目錄
spring.cloud.zookeeper.config.root=/configurations/mind/dev
spring.cloud.zookeeper.config.defaultContext=apps
spring.cloud.zookeeper.config.profileSeparator=:
  1. 使用springBoot配置與bean對映功能,測試get屬性是否能獲取zookeeper配置的值。
@Component
@ConfigurationProperties(prefix="customized")
public class CustomizedProperties {
    //@NotNull
    private String userName;
    //@NotNull
    private String password;

    private String age;

    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

相關推薦

springCloud服務學習總結

SpingCloud微服務學習總結 首先springCloud是基於springboot來構建的,應該先了解springboot的特徵。 eureka用來管理服務register與discovery,構建microService比較簡單,只需要@Enable

springCloud服務學習筆記一

        雖然入行已有4載,但所學甚淺,涉獵的技術雖然繁多,但不得其精妙所在,如若不是為了繼續生存,可能自己早已隨波逐流,哪還能有心思在這寫部落格。雖已過五五之數,但也算及時悔悟,驚若心中存有夢,唯有沉澱免自辱。          在程式設計師這條路上,必定是沒有風平

SpringCloud服務學習2-基礎服務消費者

    結合上節的內容, 我們建立了一個服務中心和一個服務提供者, 但是要想到,有服務提供者就會有服務的消費者,消費者的意思就是,呼叫其他服務(專案)提供的介面的專案。 這一節, 我們就先講基礎的服務消費者形式, 除了這種方式還有,ribbon 和fegin 的方式, 這一

SpringCloud服務學習3-服務消費者ribbon

    我們上一節, 已經學習瞭如何使用LoadBanncerClient來獲取服務的具體資訊, 然後根據獲取具體的資訊呼叫服務的提供的介面,這樣需要我們去手動拼接, 這樣比較繁瑣,對於開發人員來說非常的不友好, 所以今天我們來看一下springCloud對於對於客戶端的負載

Spring Cloud與服務學習總結(1)——Spring Cloud及服務入門

一、Spring Cloud是什麼鬼? Spring Cloud為開發者提供了快速建立一些常見的模式在分散式系統的工具(如配置管理、服務發現、斷路器、智慧路由、微代理,控制匯流排,一次性令牌,全球鎖,領

SpringCloud服務學習筆記

utm edi 自我保護 發現 mic 拒絕 連接失敗 標簽 res SpringCloud微服務學習筆記 項目地址: https://github.com/taoweidong/Micro-service-learning 單體架構(Monolithic架構) Mono

SpringBoot,SpringCloud,Docker構建服務學習筆記

SpringCloud與阿里巴巴的dubbo都是實現微服務架構的基礎框架,由與我在學習的時候是提供SpringBoot來嘗試構建微服務,因此我使用了SpringCloud。 SpringCloud的子專案非常多,在最開始學習微服務的第一步只需要學會微服務的服務

SpringCloud服務架構升級總結

一、背景 1.1 應用系統的架構歷史 1.2 什麼是微服務? 起源:微服務的概念源於 2014 年 3 月 Martin Fow

(三)springcloud - 服務架構代碼結構

article 搭建 ring 分享 組件 particle ima api 微服務雲架構 我們根據微服務化設計思想,結合spring cloud本身的服務發現、治理、配置化管理、分布式等項目優秀解決方案,我們使用Maven技術將框架進行模塊化、服務化、原子化封裝,也為後期

springcloud服務實戰:Eureka+Zuul+Ribbon+Hystrix+SpringConfig

app 支持 pro def ipa not color ins enable 原文地址:http://blog.csdn.net/yp090416/article/details/78017552 springcloud微服務實戰:Eureka+Zuul+Ribbon

服務學習筆記系列-Spring Cloud優質項目推薦

微服務Spring Cloud微服務架構集大成者,雲計算最佳業務實踐。image.pngSpring CloudSpring Cloud ConfigSpring配置管理工具包,讓你可以把配置放到遠程服務器,集中化管理集群配置,目前支持本地存儲、Git以及Subversion。Spring Cloud Bus

從零開始,輕松搞定SpringCloud服務系列

markdown class net 配置中心 html div .html href .com 本系列博文目錄 【微服務】之一:從零開始,輕松搞定SpringCloud微服務系列–開山篇(spring boot 小demo) 【微服務】之二:從零開始,輕松搞定Spring

服務】之七:輕松搞定SpringCloud服務-API權限控制

cat https lte urn 錯誤碼 netflix req ons 體系 權限控制,是一個系統當中必須的重要功能。張三只能訪問輸入張三的特定功能,李四不能訪問屬於趙六的特定菜單。這就要求對整個體系做一個完善的權限控制體系。該體系應該具備針區分用戶、權限、角色等各種

服務】之六:輕松搞定SpringCloud服務-API網關zuul

公司 create lan ice 子項目 專題 系統 如果 rose 通過前面幾篇文章的介紹,我們可以輕松搭建起來微服務體系中比較重要的幾個基礎構建服務。那麽,在本篇博文中,我們重點講解一下,如何將所有微服務的API同意對外暴露,這個就設計API網關的概念。 本系列教

SpringCloud服務簡介(一)

一起 轉發 例如 sset 雲服務 心跳檢測 因此 靈活性 dubbo Spring Cloud簡單認識  微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及

springcloud服務實戰

rac 流數據 編程 跳槽 2.0 mongod 互聯 netty 知乎 springcloud微服務實戰 後端開發: 1、2017龍果微服務架構的分布式事務解決方案 2、2017年龍果spring boot 入門實戰視頻教程-首套中文教程 3、51CTO Spring

SpringCloud-服務的註冊與發現Eureka

cloud cat AS 服務端 git hosts 中心 ML 自動退出 一、SpringCloud簡介   Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、

NET Core的mvc服務彩票開獎網平臺搭建和Route服務學習總結

依然 pen environ fig 數據 builder 特性 ets space mvc服務 和 route服務彩票開獎網平臺搭建論壇:haozbbs.com Q1446595067程序想要 增加 請求的路由服務,則需要 在ConfigureServices 中增加路由

使用SpringBoot Admin監控SpringCloud服務

urb val gap 中心 1.5 支持 環境 cover ref 本文基於SpringCloud的環境和配置上增加配置信息,而不是從0開始的配置。 一、搭建admin服務端 1、引入pom <properties> <spring-boot-

springcloud服務系列——服務網關組件Zuul

extends version iter tput tar lte aps 新工程 err 前言 通過前幾篇教程的介紹,我們基本上認識了構建一個微服務系統所需要的組件,通過這些組件的結合,我們已經可以搭建一個較為簡略的微服務系統了,比如下面的架構圖: https://im