Spring Eureka的使用入门--服务端与客户端
接上篇:
Eureka作为注册中心,连接服务端与客户端;
服务端:
依赖包:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' ext { springCloudVersion = 'Edgware.SR4' } dependencies { compile 'org.springframework.boot:spring-boot-starter-web' compile 'org.springframework.boot:spring-boot-starter-actuator' compile 'org.springframework.cloud:spring-cloud-starter-eureka' compile 'org.springframework.cloud:spring-cloud-config-client' compile 'org.springframework.cloud:spring-cloud-starter-bus-amqp' compile 'org.springframework:springloaded' compile 'org.springframework.boot:spring-boot-devtools' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } |
启动类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication . class , args); } } |
配置文件app.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | server: port: 1800 eureka: client: service-url: defaultZone: http: //localhost:8761/eureka instance: instance-id: server prefer-ip-address: true info: app.name: a-server company.name: www.*.com |
核心代码:服务提供者
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.List; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseBody; @FeignClient(name = "hello" , fallbackFactory = HelloFallbackFactory. class ) @ResponseBody public interface HelloApi { @PostMapping(path = "/api/hello" ) public String sayHI(@RequestBody SayHiRequest request); } |
服务已接想口形式提供,注册到Eurka注册中心里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import org.springframework.stereotype.Component; import feign.hystrix.FallbackFactory; @Component public class HelloFallbackFactory implements FallbackFactory<HelloApi> { @Override public HelloApicreate(Throwable cause) { return new HelloApi() { @Override public String sayHi(SayHiRequest request) { // TODO Auto-generated method stub } }; } } |
接口实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; @Controller public class HelloApiImpl implements HelloApi { @Override public String sayHi(@RequestBody @Validated SayHiRequest request) { //do somenting return "" ; } } |
服务端搭建完成;
微服务架构里,接口一般抽象出来,将接口和接口实现抽离,放到不同的服务里面;
启动服务,当我注册中心htttp://127.0.0.1:8761/eureka 查看服务注册情况;
客户端:
通过注册中心查找服务,进行服务调用;
依赖包:重点是引入接口方提供jar包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | apply plugin: 'io.spring.dependency-management' dependencies { compile 'org.springframework.cloud:spring-cloud-starter-eureka' compile 'org.springframework.cloud:spring-cloud-starter-ribbon' compile 'org.springframework.cloud:spring-cloud-starter-feign' compile 'org.springframework.cloud:spring-cloud-starter-config' compile 'org.springframework.boot:spring-boot-starter-web' compile 'org.springframework.boot:spring-boot-starter-actuator' compile(project( ':hello-api' )) } ext { springCloudVersion = 'Edgware.SR4' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } |
启动类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import org.springframework.boot.SpringApplication; import org.springframework.cloud.client.SpringCloudApplication; import org.springframework.cloud.netflix.feign.EnableFeignClients; @SpringCloudApplication @EnableFeignClients public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication . class , args); } } |
调用服务类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping( "/api/test/" ) public class TestRS { @Autowired private TestService _testService; @RequestMapping(value = "/say" , method = RequestMethod.GET, produces = "application/json;charset=UTF-8" ) @ResponseBody public ResponseBase<String> test() { String test = _testService.sayHi(); return new ResponseBase<String>( "0" , "success" , "" ); } }@servicepublic class TestService { @Autowired private HelloApi _helloApi; public String sayHi() { String test = _helloApi.sayHi(); return test; } } |
配置文件app.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | server: port: 1668 contextPath: /hello eureka: client: service-url: defaultZone: http: //127.0.0.1:8761/eureka instance: prefer-ip-address: true info: app.name: hello feign: client: config: default : connectTimeout: 60000 readTimeout: 60000 |
启动服务,访问注册中心查看是否注册成功;调用接口测试;
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步