springcloud微服務簡單搭建


一、搭建注冊中心


 1、創建一個demo項目,demo點擊右鍵創建module

2、設置項目參數

3、選擇spring cloud discovery,一直下一步,最后點擊完成,創建注冊中心

 4、將application.properties文件修改為application.yml(格式比較清晰),復制下面參數

server:
  port: 8001 # 服務端口

eureka:
  instance:
    hostname: localhost # 設置主機名
  client:
    registerWithEureka: false # 是否向 Eureka 注冊服務。該應用為服務注冊中心,不需要自注冊,設置為 false
    fetchRegistry: false # 是否檢索服務。該應用為服務注冊中心,職責為注冊和發現服務,無需檢索服務,設置為 false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 注冊中心url
spring:
  application:
    name: eurka-server  #服務名稱

5、在項目啟動類中添加@EnableEurekaServer注解

 6、啟動項目訪問http://localhost:8001/,8001是配置文件中設置的端口號

spring cloud的消費者也可以是提供者,二者只有邏輯上的區別,在spring boot中有兩種消費方式:rest+ribbon和Feign

二、spring cloud提供者(rest+ribbon)


1、同理,新建module

2、創建ribbon,不要忘記將spring cloud discovery也勾選上,否則將缺少jar包,一部分注解不顯示

3、application.yml配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8001/eureka/
server:
  port: 8002
spring:
  application:
    name: ribbon-provider

4、啟動類添加@EnableEurekaClient注冊服務,然后注入RestTemplate對象,@LoadBalanced表示開啟負載均衡

package com.cloud.ribbonprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class RibbonProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(RibbonProviderApplication.class, args);
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
View Code

5、創建controller和service

package com.cloud.ribbonprovider.controller;

import com.cloud.ribbonprovider.service.ProviderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {

    @Autowired
    ProviderService providerService;

    @GetMapping(value = "/index")
    public String index() {
        return providerService.getProvider();
    }
}
View Code
package com.cloud.ribbonprovider.service;

import org.springframework.stereotype.Service;

@Service
public class ProviderService {

    public String getProvider() {
        return "ribbon provider";
    }
}
View Code

6、啟動項目,訪問提供者http://localhost:8002/index,可以看到返回結果,接着創建消費者來獲取提供者的內容

 三、spring cloud消費者(rest+ribbon)


 1、新建module

 2、勾選ribbon,步驟同提供者

 3、application.yml配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8001/eureka/
server:
  port: 8003
spring:
  application:
    name: ribbon-consumer

4、啟動類配置

package com.cloud.ribbonconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
public class RibbonConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(RibbonConsumerApplication.class, args);
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
View Code

5、controller和service,注意service需要注入RestTemplate,用來訪問提供者

package com.cloud.ribbonconsumer.controller;

import com.cloud.ribbonconsumer.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {

    @Autowired
    ConsumerService consumerService;

    @GetMapping(value = "/index")
    public String index() {
        return "ribbon consumer/ " + consumerService.getConsumer();
    }
}
View Code

package com.cloud.ribbonconsumer.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ConsumerService {

    @Autowired
    RestTemplate restTemplate;

    public String getConsumer() {
        return restTemplate.getForObject("http://ribbon-provider/index", String.class);
    }
}
View Code

6、啟動項目,訪問消費者http://localhost:8003/index,在返回的結果中,ribbon consumer/屬於消費者自身的信息,ribbon provider屬於提供者提供的內容,簡單的springcloud搭建成功

 7、訪問注冊中心http://localhost:8001/,可以看的提供者和消費者都已經注冊成功

 

 四、Feign消費


 1、新建module,勾選openfeign

 2、application.yml配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8001/eureka/
server:
  port: 8004
spring:
  application:
    name: feign-consumer

3、啟動類添加@EnableDiscoveryClient@EnableFeignClients注解

package com.cloud.feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }

}
View Code

4、使用feign調用ribbon-consumer(既是消費者也是提供者),添加@FeignClient注解即可,value的意思就是目標服務器,可以直接用yml中配置的application名稱

package com.cloud.feign.feignrpc;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(value = "ribbon-consumer")
public interface GetFeign {

    @GetMapping(value = "index")
    public String getFeign();
}
View Code

5、創建controller和service,service中注入feign的接口

package com.cloud.feign.service;

import com.cloud.feign.feignrpc.GetFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class FeignService {

    @Autowired
    GetFeign getFeign;

    public String getFeign() {
        return getFeign.getFeign();
    }
}
View Code

package com.cloud.feign.controller;

import com.cloud.feign.service.FeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FeignController {

    @Autowired
    FeignService feignService;

    @GetMapping(value = "/feign/index")
    public String getFeign() {
        return "feign consumer/ " + feignService.getFeign();
    }
}
View Code

6、啟動項目,訪問feign消費者http://localhost:8004/feign/index,其中feign consumer/是feign自身提供的信息,ribbon consumer/ ribbon provider是ribbon consumer提供者的信息

 7、再次查看注冊中心

 

 到此,簡單的微服務構架搭建完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM