一、搭建eureka服務端
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
然後就可以在之前注冊中心頁面看到多了一個服務
三、通過feign實作對eureka用戶端的調用
同樣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用戶端的服務
再看看注冊中心的頁面發現也多了一個服務
四、總結、收
一次簡單的微服務調用就這樣完成了,真實的項目肯定還要做一些權限的配置。
自己按照步驟操作的時候肯定會遇到各種配置問題,利用搜尋引擎解決就好了。
我貼兩個自己遇到的坑
當時項目無法啟動加了這個些配置就好了
<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,第一次寫部落格
要是覺得有幫助,歡迎給個贊鼓勵鼓勵呗~