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客户端的项目,并且在服务端注册,完成之后,即可在注册中心的页面看见多了一个服务
配置文件
server:
port: 8772
#指定注册中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#服务的名称
spring:
application:
name: product-servic
表名向8761这个端口的服务注册
在springboot的启动类上面加上@EnableEurekaClientr注解,表名是客户端
然后和springmvc的玩法一样,写三层架构
接口
public interface ProductService {
List listProduct();
Product findById(long id);
}
实现类
public class ProductServiceImpl implements ProductService {
private static final Map daoMap = new HashMap();
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 listProduct() {
Collection collection = daoMap.values();
List 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
然后就可以在之前注册中心页面看到多了一个服务
同样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客户端的服务
一次简单的微服务调用就这样完成了,真实的项目肯定还要做一些权限的配置。
自己按照步骤操作的时候肯定会遇到各种配置问题,利用搜索引擎解决就好了。
我贴两个自己遇到的坑
当时项目无法启动加了这个些配置就好了
org.apache.maven.plugins
maven-compiler-plugin
1.7
org.apache.maven.plugins
maven-surefire-plugin
true
feign项目缺少这两个配置,导致我卡了半天
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
个人也是第一次写springcloud的demo,第一次写博客
要是觉得有帮助,欢迎给个赞鼓励鼓励呗~