簡單spring cloud應用搭建
一、 spring cloud 微服務架構
二、 一步一步 搭建spring cloud應用
service client
Service:提供服務的應用,埠是 808x的形式 Client:呼叫服務的應用 埠是809x的形式 整個程式以根據client端根據使用者id呼叫服務端程式返回使用者資訊做示例。
- 1、 兩個單體spring boot應用呼叫 本節講的比較簡單,分別新建兩個普通的spring boot 應用,不使用任何spring cloud相關的東西,service 端提供一個restful介面服務,client端通過RestTemplate來進行呼叫 首先只需要建立兩個單獨的Spring boot應用,服務端的埠為8081,客戶端的埠是8071,然後在客戶端用RestTemplate 呼叫即可,服務端的程式碼不貼了,就是用spring initializr 建立的一個普通的spring boot web專案,主要是說一下客戶端的呼叫。
配置RestTemplate
@Configuration public class ConfigurationBean { private SimpleClientHttpRequestFactory getHttpRequestFactory(){ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(10000); factory.setReadTimeout(10000); return factory;
呼叫方式
@RestController @RequestMapping("/client/user") public class UserApi { @Autowired private RestTemplate restTemplate; @RequestMapping("/{id}") public String getUser(@PathVariable("id") String id){ String forObject = restTemplate.getForObject("http://localhost:8081/user/1", String.class); return forObject; } }
分別啟動service和client,通過呼叫訪問http://localhost:8080/client/user/1,返回服務端資料,當然restTemplate還有很多其他的方法可用,自己在實際使用的時候可以去探究。
- 2、 以上就完成了兩個微服務間通訊,客戶端呼叫服務端的介面,功能完畢,但是這指定不是我們想要的姿勢,我們在客戶端,使用restTemplate寫死了服務端的地址。在實際的生產環境中,我們的服務端不可能只有一臺,我們的服務端也不可能只有一臺機器。我們將面臨以下問題:
- 橫向擴充套件服務
- 服務端和客戶端機器上下線
為了解決不想寫死服務端的地址,並且能動態的切換對服務端機器的呼叫的問題,引入註冊中心的概念,說起來註冊中心,我們通常會想起來zookeeper,但是spring cloud中並沒有採用zookeeper,而是採用了Eureka,zookeeper和Eureka對於保證CAP定理中的方式不同,zookeeper比較注重CP(一致性,分割槽耐受性),而對於Eureka來說重點保證AP(一致性和分割槽耐受性)。 註冊中心有了,那客戶端的請求是如何分發到相應某一臺伺服器上呢,也許我們用過nginx,nginx通過配置伺服器的權重, ip hash或者隨機以及輪訓這些策略進行分配伺服器,對於spring cloud 來說,幹這個活的是Ribbon。接下來就通過改造第一步的專案來讓它支援以上這些需求。 首先需要搭建一個EurekaServer,也就是註冊中心,和zookeeper是一個需要安裝的軟體不同,Eureka是一個內建在spring boot start中的一個應用程式,我們只需要引入spring-boot-start-eureka,然後啟動專案即可。在這之前說一下EurekaServer和我們應用程式的關係。
EurekaServer 作為註冊中心,接收服務端的註冊一級客戶端對服務端服務列表的請求, Eureka Client內嵌到應用程式中,用於註冊服務或者獲取服務。
搭建EurekaServer
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.wtf.cloud</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.M8</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
main檔案
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
配置檔案 application.yml
server:
port: 8888
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://localhost:8888/eureka/
應用的埠為8888
應用名稱:eureka-server
然後是配置eureka的相關東西
在預設設定下,改服務註冊中心也會將自己組委客戶端來嘗試註冊它自己,所以我們需要禁止它的客戶端行為
eureka.client.register-with-eureka=false
由於該應用屬於註冊中心,所以設定為false,代表不像註冊中心註冊自己
eureka.client.fetch-registry=false
由於註冊中心的職責是維護服務例項,它並不需要去檢索服務,所以也設定為false。
更多配置可以參照EurekaInstanceConfigBean 和EurekaClientConfigBean
啟動服務訪問http://localhost:8888/ 可以看到如下介面:
相關推薦
簡單spring cloud應用搭建
一、 spring cloud 微服務架構 二、 一步一步 搭建spring cloud應用 service client Se
Spring Cloud 應用篇 之 Hystrix Dashboard(斷路器監控) 的基本搭建
在以往的文章裡,已經講解了 斷路器 Hystrix 的基本使用,現在將介紹斷路器的監控 Hystrix Dashboard 的基本搭建。(一)簡介Hystrix Dashboard 是 Hystrix 的儀表盤元件,提供了資料監控,可以實時監控 Hystrix 的各個指標,然
Spring Cloud 應用篇 之 Hystrix Turbine(斷路器聚合監控)的基本搭建
在講解了 Hystrix Dashboard 之後,我們知道了,Hystrix Dashboard 實現的是單節點模式,一次只能監控一個服務,當有很多服務的時候,這樣單節點模式去監控,就需要開啟多個瀏覽器視窗,顯然這是很麻煩的。這個時候,我們就可以用到 Spring Clou
Spring Cloud應用程序上下文服務
spring springboot springcloud 配置 bootstrap Spring Boot對於如何使用Spring構建應用程序有一個看法:例如它具有常規配置文件的常規位置,以及用於常見管理和監視任務的端點。Spring Cloud建立在此之上,並添加了一些可能系統中所有組
Spring Cloud - 應用程序上下文服務
外部 posit 優先 如果 eve 並且 tps 指定 enable Spring Boot對於如何使用Spring構建應用程序有一個看法:例如它具有常規配置文件的常規位置,以及用於常見管理和監視任務的端點。Spring Cloud建立在此之上,並添加了一些可能系統中所
使用docker發布spring cloud應用
tap -s eight 端口 left 虛擬 http str entos 本文涉及到的項目: cloud-simple-docker:一個簡單的spring boot應用 Docker是一種虛擬機技術,準確的說是在linux虛擬機技術LXC基礎上又封裝了一層,可
spring cloud 初步搭建1-1(eureka配置)
技術 特點 target .com 組件 console oot 配套 quick 本次版本基於spring cloud (Finchley.RELEASE) spring boot ( 2.0.4.RELEASE ) 踩坑1:spring cloud從 2.0.幾開始,需
Spring boot Spring cloud 框架搭建
隨筆記載幾個框架搭建時的坑; 這個是server提供者模組,需要注意的是spring:application:name 接下來是fegin模組,需要主要注意資訊已說明,需要特別說明的是RequestMapping 的 value值 必須的提供者中的 Controller RequestMap
Spring Cloud 應用篇 之 Spring Cloud Config(配置中心)
為了方便儲存,轉自:https://blog.csdn.net/hubo_88/article/details/80692156 從前幾篇文章中我們就可以看出,在分散式系統中,服務數量會很多,如果要修改服務的配置檔案,會很麻煩,這個時候,我們想把配置檔案放在一個地方統一管理,實時更新,Sprin
阿裏雲ACM:雲原生配置管理利器,讓雲上的Spring Cloud應用配置管理舞動起來
消息 存儲 內容 中心 product e30 yun nac 架構 在傳統架構中,如果配置信息有變更,通常是登陸服務器手動修改配置來使配置生效。在微服務架構中,應用數和節點數由於微服務化數量激增,導致發布次數增加,配置變更難度加大,通常是將應用配置抽象出來放置在外部的配置
Spring Cloud --zuul搭建 之 自定義 filter
上篇文章已經介紹了,zuul基本的搭建,這篇文章 介紹一下自定義 Filter 首先 在 Zuul 模組中 新增加 兩個java 類 zuul1Filter 內容如下: package com.springcloud.zuul.filter; import com.netfl
Spring Cloud --zuul搭建
Zuul的作用就是路由轉發和過濾, 即將請求轉發到微服務或攔截請求; Zuul預設集成了負載均衡功能。 下面建立一個zuul工程: 開啟IntelliJ Idea ---> New
spring cloud 初步搭建完成總結
跌跌撞撞三個月,中間有出差,有懶散,但還是將spring cloud 的學習框架搭建完成了,這幾個月的學習,讓我明白了spring cloud的各個元件的整合以及應用:知道了Eureka,Hystrix,Ribbon,Feign,Zuul, Spring Clou
Spring-cloud體系搭建 01
1. Eureka簡介 在任何的分散式架構中,都需要去尋找服務的物理機器地址,我們稱之為服務發現,Eureka就是解決這類問題的元件。它是類似於Zookeeper的服務註冊中心元件,但Eureka保證了服務的高可用性,它自身的叢集機制和服務保護機制是其核心機
在 Intellij IDEA 中部署 Spring Boot / Spring Cloud 應用到阿里雲
Spring Cloud 和 Spring Boot 可以說是當前最流行的微服務開發框架了,在本文中,將向讀者介紹如何在 在 Intellij IDEA 中部署 Spring Boot / Spring Cloud 應用到阿里雲。(Eclipse 平臺請移步《在 Eclipse 中部署
Intellij IDEA 部署 Spring Boot / Spring Cloud 應用到阿裏雲
編寫 www. uil 介紹 ping target .class 部署 ofo Spring Cloud 和 Spring Boot 可以說是當前最流行的微服務開發框架了,在本文中,將向讀者介紹如何在 在 Intellij IDEA 中部署 Spring Boot / S
Spring Cloud Eureka 搭建服務端和客戶端
前言 在Eureka的服務治理體系中,主要分為服務端和客戶端 服務端:註冊中心 構建高可用的註冊中心集群后,每個註冊中心也是體系中的客戶端,只是註冊中心除了作為客戶端之外,還為其他客戶端提供了服務註冊的特殊功能) 客戶端:提供介面的微服務應用 Spri
Spring Cloud應用監控與管理Actuator
由於我們把一個複雜高耦合的單體系統拆分成了多個小型服務,所以部署應用的數量在不斷增長,造成維護複雜度大大提升。所以我們需要一套自動化的監控運維機制,這套運維機制可以不間斷的獲取每個服務應用的各種指標,並根據這些指標資訊來制定監控預警規則。 Spring B
使用docker釋出spring cloud應用
本文涉及到的專案: cloud-simple-docker:一個簡單的spring boot應用 Docker是一種虛擬機器技術,準確的說是在linux虛擬機器技術LXC基礎上又封裝了一層,可以看成是基於LXC的容器技術。可以把容器看做是一個簡易版的Linu
Spring Cloud學習一:服務治理Spring Cloud Eureka搭建高可用註冊中心
Spring Cloud Eureka是Spring Cloud NetFlix微服務套件中的一部分,基於NetFlix Eureka做了二次封裝,主要負責完成微服務架構中的服務治理功能,是微服務架構中最為核心和基礎的模組,既包含了服務端元件,也包含了客戶端元件。 又涉及到服務註冊與服務發現兩個