怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)-創(chuàng)新互聯(lián)

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站長期為超過千家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為祥云企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,祥云網(wǎng)站改版等技術(shù)服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

Eureka服務中心

就我現(xiàn)在了解到并且用的比較多的注冊中心有zookeeper和Eureka,我的上上篇文章分享了dubbo+zookeeper來構(gòu)建服務,因此本次用的是Eureka,springcloud框架也是推薦它來作為注冊中心,當然可以集成其他的服注冊中心,畢竟springcloud依賴于springboot來構(gòu)建項目的,因此集成其他組件是很快的;首先創(chuàng)建注冊中心項目 eureka_server ,通過如下引入依賴:

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

然后在application.yml文件中增加配置項:

server:
 port: 2001
spring:
 application:
  name: eureka-server
eureka:
 client:
  register-with-eureka: false #禁止自己當做服務注冊
  fetch-registry: false    #屏蔽注冊信息
 instance:
  prefer-ip-address: true
  instance-id: ${spring.application.name}:${server.port}

配置完成后,還需要再啟動類增加注解 @EnableEurekaServer ,設(shè)置基本完成即可運行,訪問  http: // localhost:2001/ 得到如下界面:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

Provider注冊服務

有了服務注冊中心,我們還需要提供一些服務并且把這些服務注冊到服務中心去,這里為了方便先創(chuàng)建一個服務提供者和消費者共同使用的接口模塊項目 eureka_api ,并創(chuàng)建如下接口和請求返回參數(shù)實體類:

public interface UserInterface {

  @PostMapping("/users")
  MoRp<List<MoUser>> getUsers(MoRq rq);

  @GetMapping("/msg")
  String getMsg();
}

MoUser實體:

public class MoUser {

  private long id;
  private String userName;
  private String userPwd;

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getUserPwd() {
    return userPwd;
  }

  public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
  }
}

然后創(chuàng)建我們的服務提供端的模塊 eureka_provider ,同樣引入eureka依賴不過和server端有點區(qū)別:

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

再來創(chuàng)建服務提供端要提供的服務UserController,并且實現(xiàn)我們eureka_api模塊中的UserInterface接口,代碼如下:

@RestController
public class UserController implements UserInterface {

  @Autowired
  private HttpServletRequest request;

  @Override
  public MoRp<List<MoUser>> getUsers(MoRq rq) {

    MoRp<List<MoUser>> rp = new MoRp<>();

    List<MoUser> list = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
      MoUser moUser = new MoUser();
      moUser.setId(i);
      moUser.setUserName("神牛" + i);
      list.add(moUser);
    }
    rp.setT(list);
    rp.setStatus(list.size() >= 1 ? 1 : 0);
    rp.setMessage(list.size() >= 1 ? "" : "暫無數(shù)據(jù)");
    return rp;
  }

  @Override
  public String getMsg() {

    return "這里是provider,端口:"+ request.getServerPort();
  }
}

這里需要注意的是Controller的兩個服務接口中沒有再加PostMapping或GetMapping,因為這個由被實現(xiàn)接口申明了;定義好了users和msg服務后,我們還需要能把他們注入到服務注冊中心去,因此需要如下application.yml的配置:

spring:
 application:
  name: eureka-provider #服務名稱
eureka:
 client:
  service-url:
   defaultZone: http://localhost:2001/eureka/ #服務中心地址
 instance:
  prefer-ip-address: true
  instance-id: ${spring.application.name}:${server.port}
server:
 port: 2004

我們還需要在啟動類增加如下標記 @EnableEurekaClient ,它表示啟動eureka客戶端,因為服務提供者相對服務中心來說是屬于客戶端的存在;當運行eureka_provider項目的時候,我們在注冊中心能看到如下信息:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

為了保證服務提供端接口沒問題,我們可以直接點擊eureka-provider:2004,然后增加要方法接口的路徑我這里是:http://192.168.153.148:2004/msg,即可得到如下正常訪問接口返回的信息:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

Consumer發(fā)現(xiàn)服務

有了接口服務,我們還需要消費服務,因此創(chuàng)建module項目eureka_consumer,因為這里采用fegin偽客戶端的方式來訪問我們服務提供端,并且同樣需要引入eureka的依賴:

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

然后在service層定義UserService服務并且實現(xiàn)公共接口模塊 eureka_api 中的接口,代碼如:

@FeignClient(value = "eureka-provider")
 public interface UserService extends UserInterface {
 }

通過FeignClient來指定調(diào)用的服務端應用名稱eureka-provider,這名稱對應注冊在服務中心的Application目錄下 ,在Controller層創(chuàng)建一個響應的輸出UserController并分別提供兩個展示的接口,代碼如:

@RestController
public class UserController{

  @Autowired
  private UserService userService;

  @GetMapping("/users")
  public MoRp<List<MoUser>> getUsers(MoRq rq) {
    return userService.getUsers(rq);
  }

  @GetMapping("/msg")
  public String getMsg() {
    return userService.getMsg();
  }
}

同樣Consumer端也需要在application.yml中配置一些信息:

spring:
 application:
  name: eureka-consumer
eureka:
 client:
  service-url:
   defaultZone: http://localhost:2001/eureka/ #注冊中心地址
 instance:
  prefer-ip-address: true
  instance-id: ${spring.application.name}:${server.port}
server:
 port: 2005

配置基本和provider端差不多,最后需要在啟動類申明如下注解:

@SpringBootApplication
@EnableDiscoveryClient //消費者客戶端
@EnableFeignClients //feign客戶端
public class EurekaConsumerApplication {
  public static void main(String[] args) {
    SpringApplication.run(EurekaConsumerApplication.class, args);
  }
}

啟動eureka_consumer項目后,我們能在注冊中心看到它注冊進來的信息:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

然后通過訪問eureka_consumer消費方的接口測試eureka_provider服務提供方的接口數(shù)據(jù)知否能正常響應,接口地址 http: // 192.168.153.148:2005/msg :

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

通過訪問consumer得到了provider的結(jié)果,這就是服務注冊和發(fā)現(xiàn)的基本測試流程;至于消費方怎么請求到提供方接口的,我們通過如下手工圖可解:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

Eureka服務中心高可用

由上面手工圖來看,服務中心承擔著很重要的角色,通常這種服務中心不僅僅只搭建一個,因此需要搭建一套高可用的服務中心出來;其實很簡單provider和consumer配置都不用動,我們只需要在第一節(jié)點的eureka-server項目的application.yml中配置下并且在多啟動幾個不同端口的服務就行了(同一臺服務器是多個端口,不同服務器端口可能是一樣的):

server:
 port: 2001
spring:
 application:
  name: eureka-server
eureka:
 client:
  register-with-eureka: true  #配置高可用的時候需要開放自己注冊自己
  fetch-registry: true
  service-url:
   defaultZone: http://localhost:2002/eureka/ #注冊到端口2002的eureka中
#   defaultZone: http://localhost:2001/eureka/
 instance:
  prefer-ip-address: true
  instance-id: ${spring.application.name}:${server.port}
 server:
  eviction-interval-timer-in-ms: 2000 #剔除失效服務間隔

高可用配置需要注意以下幾點:

  1. register-with-eureka: true 配置高可用的時候需要開放自己注冊自己,便于多個eureka注冊中心互通

  2. defaultZone:http://localhost:2002/eureka/ 每個注冊中心都需要吧自己注冊到別的注冊中心去

這里我創(chuàng)建了兩個注冊中心地址分別為:http://localhost:2001/,http://localhost:2002/;由于之前provider和consumer配置的注冊中心地址都是2001端口的,為了驗證高可用我們需要訪問2002端口注冊中心,效果如:

怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

網(wǎng)頁標題:怎么在springcloud中實現(xiàn)服務注冊與發(fā)現(xiàn)-創(chuàng)新互聯(lián)
地址分享:http://muchs.cn/article8/dcoeip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、微信小程序、網(wǎng)站策劃、企業(yè)建站云服務器、服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設(shè)