一、搭建eureka服务端
idea智能创建eureka客户端和服务端
我们创建的是单机版的服务端配置文件如下
server:port: 8761eureka:server:enable-self-preservation: falseinstance:hostname: localhostclient:#声明自己是服务端registerWithEureka: falsefetchRegistry: falseserviceUrl: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);}@Overridepublic List<Product> listProduct() {Collection<Product> collection = daoMap.values();List<Product> list = new ArrayList<>(collection);return list;}@Overridepublic Product findById(long id) {Product product = daoMap.get(id);return product;}}
controller,这里注意/api/product/find,后面的feign调用会用到
@RestController@RequestMapping("/api/product/")public class ProductController {@Autowiredprivate 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: 8765spring: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,第一次写博客
要是觉得有帮助,欢迎给个赞鼓励鼓励呗~