SpringCloud微服务之服务提供者
继上一篇博文单节点的SpringCloud注册中心eureka之后我们编写一个SpringCloud服务提供者,它也是一个web项目,新建项目的方式跟上一篇博文一个讨论,本文是基于上一篇的。
引入pom文件的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
该web项目是服务提供者,eureka注册中心client
。
当然了这句话也能在配置文件中体现出来,这句话还是要理解的。
编写服务启动类
@SpringBootApplication
@EnableEurekaClient
public class LoginApplication {
public static void main(String[] args) {
SpringApplication.run(LoginApplication.class);
}
}
上一篇博文的启动类是@EnableEurekaServer,这里是@EnableEurekaClient
目前只有这个启动类,是没有办法将服务注册到Eureka的,我们需要通过配置让改web项目能够知道并注册到eureka注册中心上。
application.yml配置
server:
port: 8011
servlet:
context-path: /
spring:
profiles:
active: local
application:
name: micro-tpl-login
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka
配置项eureka.client.service-url.defaultZone就是告知改应用eureka的地址
这样一来改服务提供者就能注册,并拉去到注册信息了。
启动我们的启动类,观察之前的eureka的控制台:http://localhost:8001/
我们的应用micro-tpl-login就注册上来了。
关闭服务在观察eureka注册中心变化:
服务被移除掉了。
我们写一个服务:
@RestController
@RequestMapping("/provider")
public class ProviderController {
@GetMapping("/say/hi/{name}")
public String sayHi(@PathVariable String name){
return "你好:"+name;
}
}
再启动,在观察Eureka注册中心控制台 返现服务有注册上了,我们这里不贴图了。
http://localhost:8011/provider/say/hi/lucy
你好:lucy
服务提供者目前就写好了,额!
此时我们把eureka相关的配置去掉,就直接在浏览器放入http://localhost:8011/provider/say/hi/lucy 也是能正常访问的,体现不出它在SpringCloud微服务中的服务者的姿势,我们写一个服务消费者在另外新的应用中直接调用服务提供者的rest服务。
关于异常
我们在写一个方法:
@GetMapping("/get/user/{id}")
public ResponseEntity<LoginUser> getUser(@PathVariable Long id){
if(Long.valueOf(2L).equals(id)){
throw new IllegalArgumentException();
}
LoginUser loginUser = new LoginUser();
loginUser.setId(1L);
loginUser.setName("张三");
loginUser.setPhone("15701311193");
return new ResponseEntity<LoginUser>(loginUser, HttpStatus.OK);
}
为了模拟异常我们当输入:http://localhost:8011/provider/get/user/2
我们抛出一个异常,但是spring帮我们自己统一定义了一个/error页面,我们没有定义所以就出现了,下面的异常:
我们先来解决,创建一个Controller