• Spring Eureka的使用入门--服务端与客户端


    接上篇:

     Eureka作为注册中心,连接服务端与客户端;

    服务端:

     依赖包:

    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}"
    	}
    }
    

    启动类:

    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

    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
    

    核心代码:服务提供者

    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注册中心里:

    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
    				
    			}
    
    		};
    	}
    
    }
    

      接口实现:

    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包

    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}"
    	}
    }
    

     启动类:

    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);
    	}
    
    }
    

     调用服务类:

    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", ""); } }

    @service
    public class TestService {
    	@Autowired
    	private HelloApi _helloApi;
    
    	public String sayHi() {
    String test = _helloApi.sayHi(); return test; } }

    配置文件app.yml

    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
    

     启动服务,访问注册中心查看是否注册成功;调用接口测试;

  • 相关阅读:
    OpenCASCADE DataExchange DWG
    OpenCASCADE Conic to BSpline Curves-Circle
    OpenCASCADE Conic to BSpline Curves-Hyperbola
    Java中通过命令行启动jar包时指定编码
    VSCode来绘制流程图真是得心应手
    若依微服务版新建业务模块后提示找不到mapper的解决方法
    若依微服务版怎样实现不同业务模块下实体和mapper互相调用
    GitLab怎样实现新建仓库并允许开发者推送代码实现协同开发
    RuoYi-Process多模块activity工作流项目快速搭建
    若依微服务版手把手教你本地搭建环境并运行前后端项目
  • 原文地址:https://www.cnblogs.com/liangblog/p/9566525.html
Copyright © 2020-2023  润新知