簡單spring cloud應用搭建

1、 spring cloud 微服務架構

2、 一步一步 搭建spring cloud應用

service clientjava

Service:提供服務的應用,端口是 808x的形式 Client:調用服務的應用 端口是809x的形式 整個程序以根據client端根據用戶id調用服務端程序返回用戶信息作示例。nginx

  • 一、 兩個單體spring boot應用調用 本節講的比較簡單,分別新建兩個普通的spring boot 應用,不使用任何spring cloud相關的東西,service 端提供一個restful接口服務,client端經過RestTemplate來進行調用 首先只須要建立兩個單獨的Spring boot應用,服務端的端口爲8081,客戶端的端口是8071,而後在客戶端用RestTemplate 調用便可,服務端的代碼不貼了,就是用spring initializr 建立的一個普通的spring boot web項目,主要是說一下客戶端的調用。

配置RestTemplateweb

@Configuration
public class ConfigurationBean {
    private SimpleClientHttpRequestFactory getHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(10000);
        factory.setReadTimeout(10000);
        return factory;

調用方式spring

@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還有不少其餘的方法可用,本身在實際使用的時候能夠去探究。shell

  • 二、 以上就完成了兩個微服務間通訊,客戶端調用服務端的接口,功能完畢,可是這指定不是咱們想要的姿式,咱們在客戶端,使用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和咱們應用程序的關係。 apache

EurekaServer 做爲註冊中心,接收服務端的註冊一級客戶端對服務端服務列表的請求, Eureka Client內嵌到應用程序中,用於註冊服務或者獲取服務。
搭建EurekaServer服務器

pom.xmlrestful

<?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.ymlapp

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/ 能夠看到以下界面:

相關文章
相關標籤/搜索