每天學點SpringCloud(二):服務註冊與發現Eureka

来源:https://www.cnblogs.com/zhixiang-org-cn/archive/2018/07/11/9292724.html
-Advertisement-
Play Games

相信看過 每天學點SpringCloud(一):簡單服務提供者消費者調用的同學都發現了,在最後消費者調用提供者的時候把提供者的地址硬編碼在了代碼中,這樣的方式肯定是不行的,今天,我們就是要Eureka來解決這個問題 創建Eureka服務 1.我們在原先項目的基礎上再新建一個項目cloud-demo- ...


 

相信看過 每天學點SpringCloud(一):簡單服務提供者消費者調用的同學都發現了,在最後消費者調用提供者的時候把提供者的地址硬編碼在了代碼中,這樣的方式肯定是不行的,今天,我們就是要Eureka來解決這個問題

 

創建Eureka服務

 

1.我們在原先項目的基礎上再新建一個項目cloud-demo-eureka

此項目的依賴為

<?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">
    <parent>
        <artifactId>spring-cloud-demo</artifactId>
        <groupId>cn.org.zhixiang</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-demo-eureka</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <!--註意此處的依賴是SpringBoot2.0以後專用的,如果您使用的SpringBoot版本低於2.0請使用spring-cloud-starter-eureka-server-->
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

2.創建application.yml

spring:
  application:
    name: eureka-server
#開啟許可權認證
  security: 
    basic:
      enabled: true
    user:
      name: root
      password: root

server:
  host: localhost
  port: 8761
eureka:
  client:
    #此項目不作為客戶端註冊
    register-with-eureka: false
    fetch-registry: false
    service-url:
      #開啟許可權驗證後Eureka地址為 用戶名:密碼@地址:埠號,如未開啟許可權驗證則直接使用 地址:埠號
      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${server.host}:${server.port}/eureka

 

3.創建cn.org.zhixiang包,在此包下創建CloudDemoEureApplication啟動類

package cn.org.zhixiang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class CloudDemoEureApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudDemoEureApplication.class, args);
    }
}

 

4.如果您開啟了許可權驗證並且SpringBoot版本為2.0以上的話還需要一個操作,如果不是此布可以忽略

因為2.0預設開啟了csrf,如果我們現在直接啟動Eureka服務的話客戶端是註冊不上的,所以需要把csrf關閉

在cn.org.zhixiang包下新建security包,新建WebSecurityConfigurer類

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        super.configure(http);
    }
}

 

5.在CloudDemoEureApplication啟動類中啟動Eureka服務,瀏覽器訪問http://localhost:8761/eureka,輸入用戶名root和密碼root登陸Eureka後Eureka服務創建成功。

 

修改服務提供者

 

1.在原先的cloud-demo-provider項目中添加Eureka依賴

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

 

2.修改application.yml,增加以下配置

eurekaServer:
  host: localhost
  port: 8761
  user: root
  password: root

eureka:
  client:
    #將此項目註冊到Eureka服務
    register-with-eureka: true
    service-url:
      defaultZone: http://${eurekaServer.user}:${eurekaServer.password}@${eurekaServer.host}:${eurekaServer.port}/eureka

 

3.在CloudDemoProviderApplication啟動類中增加一個註解:@EnableEurekaClient標示此項目是Eureka客戶端

 

4.緊接著先啟動剛纔創建的Eureka服務再啟動此項目,當我們再次訪問Eureka的時候可以發現我們的項目已經註冊上了Eureka

 

 

5.因為我們此次需要玩點高大上的了,所以只有一個服務提供者肯定是不行的,我們copy一下上方的cloud-demo-provider項目,新項目命名為cloud-demo-provider-2,這個新項目需要修改的地方只有三個:

第一是pom文件中的項目id註意不要與上個項目一樣,推薦直接叫做cloud-demo-provider-2.

第二是yml文件中spring.application.name應該是與上個項目都一樣的,名字叫做:provider-demo。這個不做修改,只需要修改server.port,保證埠不會衝突,比如我改成了8079

第三是UserController,可以看到上個項目返回的User是硬編碼的叫做張三的,這次這個項目我們把這個張三修改成李四,來區分這兩個項目

 

修改完畢以後啟動項目Eureka中應該是這樣的

就是這個provider-demo的服務有兩個提供者的意思

 

修改消費者

 

現在我們已經開始修改上次服務地址硬編碼的問題了

 

1.cloud-demo-consumer項目增加Eureka依賴

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.啟動類中增加了兩個註解

@SpringBootApplication
@EnableEurekaClient
public class CloudDemoConsumerApplication {
   @Bean
   @LoadBalanced//開啟負載均衡
   public RestTemplate restTemplate(){
      return new RestTemplate();
   }
   public static void main(String[] args) {
      SpringApplication.run(CloudDemoConsumerApplication.class, args);
   }
}

 

3.在UserController中做一下改變

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getUser/{id}")
    public User getUser(@PathVariable Long id){
         return restTemplate.getForObject("http://provider-demo/user/getUser/"+id,User.class);
    }
}

可以看到,我們上次使用的localhost:8078/user/getUser已經換成了provider-demo/user/getUser了。不知道大家還記不記得這個provider-demo麽?它呢,是兩個項目中spring.application.name的屬性值,在Eureka中呢,就對應著一個服務的id,也就是說在Eureka中,我們可以不使用ip+埠而是使用Ip去訪問服務。

 

大家將這四個項目都啟動起來以後,訪問http://localhost:8088/user/getUser/5,是不是發現一會會返回張三,一會會返回李四呢。這個就是我們一開始加的@LoadBalanced註解,也就是開啟了Eureka的負載均衡。這樣的話我們是不是已經完美的完成了昨天遺留的問題呢?

 

GitHub:https://github.com/2388386839/spring-cloud-demo

碼雲:https://gitee.com/zhixiang_blog/apring-cloud-demo

 

如果對您有所幫助,請記得幫忙點一個star哦

 

本文出自https://zhixiang.org.cn/#/blog/read/3e9e73fd-bda0-4638-826b-cceb43b77b07,轉載請保留。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • snowfall.jquery.js是樹葉等圖片飄落的插件,但是只支持一種圖片的飄落效果,但是我遇到的情況需要飄落未知數種類的圖片,即圖片有多種;那麼就要對原插件做些修改; 在原snowfall.js找到下麵代碼: 將上面代碼修改成: 修改前原插件中的 options.image是一個圖片地址,修改 ...
  • 前端使用easyui框架,後端使用JAVA 的JFinal框架開發 功能描述:實現附件上傳功能。文件上傳路徑為:。。/upload(上傳文件夾)/身份證號/慢病編碼/上傳的附件。 細節要求:實現多圖片上傳,上傳後可在前臺頁面實現二次增加和刪除 1.前臺頁面顯示:填寫身份證號、選擇慢病信息,點擊“上傳 ...
  • Reverse a String(翻轉字元串) 把字元串轉化成數組 藉助數組的reverse方法翻轉數組順序 把數組轉化成字元串 用.split('')將字元串轉換成單個字母組成的數組 用.reverse()把數組反轉 用.join('')把數組元素連接成字元串 .split()方法:http:// ...
  • 概念:立即執行函數顧名思義就是函數定義好之後立即執行。函數表達式方式:函數表達式後面加括弧()即可立即執行函數。 var xmlhttpUtil = function () { function getText(url,callback){ alert("dog"); }(); 匿名函數方式:匿名函... ...
  • 1. 瀏覽器載入 (1) 同步載入 在網頁中,瀏覽器載入js文件的方式是通過<script>標簽。如下所示: <script>標簽很方便,只要加入後,瀏覽器便可讀取並運行,但是在讀取的時候,瀏覽器是按照<script>標簽的出現順序,讀取Javascript文件,然後立即運行,導致在多個文件相互依賴 ...
  • 1.評估功能變數名稱類型 .com——商業實體 .edu——僅限有學位或更高等學歷授予資格的高等教育使用 .gov——僅限政府使用 .net——與Internrt網路支持相關的團體,通常是Internet服務提供商或者電信公司 .org——非盈利組織 2.HTML -HTML是一套標記符號或者代碼集,他們插 ...
  • 一、理解 1、什麼是模塊、模塊化? 將一個複雜的程式依據一定的規範封裝成幾個文件,併進行組合在一起 2、為什麼要模塊化? 降低複雜度,提高解耦性,部署方便 3、模塊化的好處 避免命名衝突(減少命名空間污染) 更好的分離,按需載入 更高復用性 高可維護性 4、頁面引入載入script 二、模塊化規範 ...
  • 1.Socket簡介 Socket也稱作“套接字“,是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層調用以實現進程在網路中通信。它分為流式套接字和數據包套接字,分別對應網路傳輸控制層的TCP和UDP協議。TCP協議是一種面向連接的、可靠的、基於位元組流的傳輸 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...