天天看點

簡單上手springcloud,eureka加fengin實作服務調用

一、搭建eureka服務端

簡單上手springcloud,eureka加fengin實作服務調用

idea智能建立eureka用戶端和服務端

我們建立的是單機版的服務端配置檔案如下

server:
  port: 8761
eureka:
  server:
    enable-self-preservation: false
  instance:
    hostname: localhost
  client:
    #聲明自己是服務端
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
           

在springboot的啟動類上面加上@EnableEurekaServer注解

啟動服務,在浏覽器輸入http://localhost:8761/,即可看見注冊中心的頁面

二、搭建eureka用戶端

建立一個eureka用戶端的項目,并且在服務端注冊,完成之後,即可在注冊中心的頁面看見多了一個服務

配置檔案

server:
  port: 8772


#指定注冊中心位址
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

           

#服務的名稱

spring:

application:

name: product-servic

表名向8761這個端口的服務注冊

在springboot的啟動類上面加上@EnableEurekaClientr注解,表名是用戶端

然後和springmvc的玩法一樣,寫三層架構

接口

public interface ProductService {
    List<Product> listProduct();

    Product findById(long id);

}
           

實作類

public class ProductServiceImpl implements ProductService {

    private static final Map<Long, Product> daoMap = new HashMap<Long, Product>();
    static {
        Product p1 = new Product(1, "iphonex", 9999);
        Product p2 = new Product(2, "xiaomi", 7777);
        daoMap.put(p1.getId(),p1);
        daoMap.put(p2.getId(),p2);
    }


    @Override
    public List<Product> listProduct() {

        Collection<Product> collection = daoMap.values();
        List<Product> list = new ArrayList<>(collection);

        return list;
    }

    @Override
    public Product findById(long id) {
        Product product = daoMap.get(id);
        return product;
    }
}
           

controller,這裡注意/api/product/find,後面的feign調用會用到

@RestController
@RequestMapping("/api/product/")
public class ProductController {
    @Autowired
    private ProductService productService;
    @RequestMapping("list")
    public Object list(){
        return productService.listProduct();
    }

    @RequestMapping("find")
    public Object findById(@RequestParam("id") int id){
        return productService.findById(id);
    }

}
           

浏覽器輸入

http://localhost:8772/api/product/find?id=1

然後就可以在之前注冊中心頁面看到多了一個服務

簡單上手springcloud,eureka加fengin實作服務調用

三、通過feign實作對eureka用戶端的調用

簡單上手springcloud,eureka加fengin實作服務調用

同樣idea智能建立feign用戶端項目

在springboot啟動類加上

@SpringBootApplication

@EnableEurekaClient

@EnableDiscoveryClient

@EnableFeignClients

注解

配置檔案

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8765
spring:
  application:
    name: service-feign
           

同樣表示往注冊中心注冊該服務

@FeignClient(value = "product-servic")
public interface SchedualServiceHi {
    @RequestMapping(value = "/api/product/find",method = RequestMethod.GET)
    String sayHiFromClientOne(@RequestParam(value = "id") long id);
}

           

這裡的product-servic和前面erueka用戶端的服務名一緻

/api/product/find

@RequestParam(value = “id”) long id

這個路徑和參數也要和前面erueka用戶端的一緻

這個服務的端口是8765

浏覽器輸入

http://localhost:8765/api/product/find?id=2

我們可以看到内容和

http://localhost:8772/api/product/find?id=2

這個頁面的内容是一樣的

說明feign成功調用了erueka用戶端的服務

再看看注冊中心的頁面發現也多了一個服務

簡單上手springcloud,eureka加fengin實作服務調用

四、總結、收

一次簡單的微服務調用就這樣完成了,真實的項目肯定還要做一些權限的配置。

自己按照步驟操作的時候肯定會遇到各種配置問題,利用搜尋引擎解決就好了。

我貼兩個自己遇到的坑

當時項目無法啟動加了這個些配置就好了

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <!--跳過項目運作測試用例-->
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
           

feign項目缺少這兩個配置,導緻我卡了半天

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
           

個人也是第一次寫springcloud的demo,第一次寫部落格

要是覺得有幫助,歡迎給個贊鼓勵鼓勵呗~

繼續閱讀