Os primeiros artigos se concentram principalmente no uso de Eureka no Centro de Registro. Em seguida, você pode criar um provedor de serviços para se registrar no Eureka.
Veja o código-fonte da demonstração: https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-demo
Para facilitar o controle da versão, os próximos projetos são configurados com base na configuração dos pais https://github.com/ryan-miao/spring-cloud-edgware-demo.
Crie um provedor infantil de Moudle-Demo
Crie um módulo filho com o provedor de nome do projeto-Demo. Preencha as dependências de trampolim e springcloud
<Ependenciens> <!-Iniciar dependência da SpringBoot-> <Ependency> <PuerpId> org.springframework.boot </groupiD> <stifactId> Spring-Boot-Starter-Web </ArtifactId> </dependency> <pendence> <purgiD> org.springFramework.Boot </GruntEncy> artift> Artift> Artift> SpringFROTFROTFROTIMENTE </GruntyF> Artift. </dependency> <pendence> <voundiD> org.springframework.boot </groupiD> <TRORFACTID> spring-boot-devtools </stutifactId> <cutional> true </cptional> </dependency> <pendence> <puperid> cem.fasterxml.jackson.dattyped> <TarifactId> Jackson-Datatype-JSR310 </ArtifactId> </Dependency> <pendency> <puperid> org.springframework.cloud </frupid> </ArtifactId> Spring-Cloud-Starter-eureka </stifactid> </dependência <! <TRATIFACTID> Springfox-Swagger2 </ArtifactId> </Dependency> <pendence> <puperid> io.springfox </groupiD> <TRATIFACTID> springfox-swagger-ui </artifactid> </ipendency> <!-Tool Start-> <Pendency> <purvEd> com.google.guogle.guold> </dependency> <!-Ferramenta Start-> <Pendency> <PupiD> com.google.GOOGLE.GOOGLE.GROGLE.GROGLE.GROGELO.GROGET.GROPAT.GROPAT.GROPAT.GROPAT.GROPAT. </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> </dependency> <!--Tool class end--> </dependências>
spring-boot-starter-web fornece recursos da Web, spring-boot-starter-actuator fornece estatísticas do projeto e terminal de monitoramento básico. Se você deseja usar o monitoramento da primavera-admin, você deve adicionar o modo de desenvolvimento spring-boot-devtools jackson-datatype-jsr310 pode resolver o novo tempo de Java8 Apilocaldate Disintegation e registro spring-cloud-starter-eureka eureka, responsável por manter o batimento cardíaco e registrar swagger do lombok Parece refrescante Ferramenta de Setter Getter Setter. A grande e completa Java Class logstash-logback-encoder da guava quer coletar logs para alce
Aula de inicialização
@Enablediscoveryclient@SpringBoOTApplicationPublic Class ProviderDemoApplication {public static void main (String [] args) {springApplication.run (providerDemoApplication.class, args); }} @EnableDiscoveryClient para ativar o registro de serviço
Essa aplicação do provider deve ser colocada na camada mais externa do pacote do projeto, porque o @springbootappliatin contém a anotação do @ComponentsCan, e a varredura padrão é digitalizada no pacote de classe, caso contrário, a varredura deve ser especificada manualmente.
Swagger
Swagger é uma classe de configuração
@Enableswagger2@configurationpublic class swaggerconfiguration {private apiinfo apiinfo () {return novo apiinfobuilder () .title ("provedor de serviços api") .Description ("fornecem informações do usuário") .termsofSoSoFurl (") .version (" 1.0 ".0 "). } /*** Defina a configuração da API. */ @Bean public Docket API () {Retorne new Docket (documentationType.swagger_2) .Select () .apis (requestHandlerSelectors.withclassannotation (api.class)) .build () .apiinfo (apiinfo ()); }}Para o roteamento da página Swagger, precisamos orientar o seguinte:
Crie um controlador para navegar
@ControllerPublic Classe HomeController {@getMapping (value = {"/api", "/"}) public string api () {return "redirect: /swagger-ui.html"; }}Vamos pegar uma interface do controlador
@Api@RestController@RequestMapping("/api/v1/users")public class UserController{ private List<User> users = Lists.newArrayList( new User(1, "Tan Haoqiang", 100, LocalDate.now()), new User(2, "Yan Weimin", 120, LocalDate.now()), new User(3, "Tan Haoqiang", 100, LocalDate.now ()), novo usuário (4, "James Gosling", 150, localDate.now ()), novo usuário (6, "Doug Lea", 150, LocalDate.now ())); @GetMapping ("/") Lista pública <Useservo> list () {return users.stream () .map (u -> new uservo (u.getId (), u.getName (), u.getage (), u.getbirth ())) .collect (collectors.tolist ()); }}Algumas configurações simples de ambiente
Application.yml
Spring: Aplicação: Nome: Provedor-Demo Jackson: Serialização: Write_dates_as_timestamps: false padrão-property-Inclusion: Non_null#Servidor Expiration Time Configuration. Se o batimento cardíaco não for recebido após esse período, o Eurekaserver removerá esta instância. Observe que o Eurekaserver deve definir eureka.server.eviction interval-timer-in-ms, caso contrário, essa configuração é inválida. Essa configuração geralmente é três vezes a configuração do tempo de atualização do serviço. #Default 90Seureka.Instance.Lease-Expuration-duração em segundos: 15 #Serviço atualiza a configuração do tempo, e os batimentos cardíacos estarão ativos sempre que desta vez #Default 30SerEureka.Instance.Lease-renowal-Interval-in-Seconds: 5Server: 8082SPRINGXXOMENTOMENTO: /Swagger-RESOURCES /API-DOCSLOG: PATH: LOGS
aplicativo-dev.yml
Gerenciamento: Segurança: Ativado: FalseeeAteka: Cliente: ServiceUrl: DefaultZone: http: // localhost: 8761/eureka/logstash: URL: localhost: 4560
Preciso mencionar aqui que, como integra o Logstash, devo instalar o Logstash, consulte Elk para a introdução. Obviamente, você pode pular, desde que não forneça a configuração logback.xml, você pode remover o logstash na dependência.
Configuração de log
O logback é usado como estrutura de log por padrão. A configuração simples é a seguinte. Para aqueles que não desejam usar o Logstash, basta remover o Appender Logstash.
Crie um novo logback-spring.xml em recurso
<? xml versão = "1.0" coding = "utf-8"?> <Configuration scan = "true" scanPeriod = "60 segundos" debug = "false"> <springProperty scope = "context" name = "AppName" fonte = "spring.application.name" = defaultValue = "nome"/> "/>" defaultValue = "logs"/> <SpringProperty scope = "context" name = "Logstashurl" source = "Logstash.url" defaultValue = "localhost: 4560"/> <Incluir Resource = "Org/Springframework/boot/log/logback/base.xml"/> <! <dattern> %d {hh: mm: ss.ss} %x {req.remotehost} %x {req.requesturi} $ {appName} [ %thread] %-5level %logger {36}- %msg %n </padrony> </coder> </Appnder> <ppnder> <ppnder> <ppnder> <ppnder >pnder >pnder >pnder >pnder> <! <FileNamePattern> $ {Log.Path}/$ {AppName}.%d {yyyy-mm-dd} .log </filenamepattern> </rollingpolicy> <coder> <dattern>%d {hh: mm: ss.ss} $ {AppName}%x {hh: mm: ss.ss} $ {AppName} %X {req.requesturi} %x {req.useragent} %x {req.method}-[ %thread] %-5level %logger {36}- %msg %n </padrony> </coder> </appender> <!-saída para logstash-> <papnder> "Logsth" " <Encoder charset = "utf-8"/> </appender> <springProfile name = "dev"> <root level = "info"> <appender-ref ref = "console"/> <appender-ref ref = "file"/> <ppender-ref ref = "file"/> <ppnder-ref = "file"/> <pp App (> <ppender-ref ref = "file"/> <ppender-ref = "> <pp App"/> <ppnder-refs-ref = "file"/> <apnder-ref = "> <pp App) <SpringProfile name = "Test, Prod"> <root nível = "info"> <appender-ref ref = "file"/> <appender-ref ref = "Logstash"/> </root> </pringprofile> </figuration>comece
Certifique -se de que o Eureka tenha sido iniciado, é melhor iniciar o Admin, para facilitar a visualização do status do aplicativo, e o sistema de madeira da Elk também está melhor disponível. Claro, apenas Eureka é uma necessidade.
Compilar e embalar
Pacote de instalação limpo MVN: reembalagem: reembalagem
Execute o método principal, especifique o perfil como Dev, você pode editar a configuração de execução na Idea e adicionar parâmetros
--spring.profiles.active = dev
Ou inicie o frasco da linha de comando
Copie o código da seguinte forma: java -xms256m -xmx1g -xx:+useg1gc-jar ./target/provider-demo-0.0.1-snapshot.jar ---spring.profiles.active = dev
Após a startup, acesse Eureka
Visite admin
Visite o provedor-democurso
Expor nossa API ao consumidor
Como existem provedores de serviços, deve ser para o consumo do consumidor. Como os consumidores devem ser consumidos? Basta chamar isso de solicitação HTTP manualmente. O contrato Restful Swagger mencionado anteriormente são os parâmetros e os requisitos fornecidos pelo provedor de serviços para solicitar acesso. Se o consumidor desenvolver esse cliente manualmente, será demorado e propenso a erros. Portanto, como provedor de serviços, você deve fornecer SDK ou cliente ao consumidor para uso.
No sistema de tecnologia da Spring Cloud, as chamadas remotas são naturalmente a principal prioridade. O uso específico que encontrei é Feign+Ribbon+Hystrix.
Através do encaixe da interface declarativa de Feign, o consumidor chama para o provedor é implementado. Balanceamento de carga do cliente de fita, Hystrix é um disjuntor saudável.
Aqui, primeiro precisamos fornecer a interface do Feign.
Refine a API do controlador em uma interface. Primeiro, criamos um novo projeto
https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-api
Coloque este projeto na lista de dependência do provedor-deem
<!-dependência interna-> <pendency> <voundid> com.test </frugiD> <ArtifactId> provider-api </artifactId> <versão> 0.0.1-snapshot </sipers> </dependente> <!-end dependência interna final->
Saia do canal da interface userAPI no projeto do provedor-api
@RequestMapping ("/api/v1/usuários") interface pública userApi {@getMapping ("/") List <Useservo> list ();}O controlador do provedor-Demo é modificado da seguinte forma
@Api@RestControllerpublic class UserController implements UserApi { private List<User> users = Lists.newArrayList( new User(1, "Tan Haoqiang", 100, LocalDate.now()), new User(2, "Yan Weimin", 120, LocalDate.now()), new User(3, "Tan Haoqiang", 100, LocalDate.now ()), novo usuário (4, "James Gosling", 150, localDate.now ()), novo usuário (6, "Doug Lea", 150, localDate.now ())); @Override Public List <Useservo> list () {return users.stream () .map (u -> new uservo (u.getId (), u.getName (), u.getage (), u.getBirth ())) .Collect (collectors.tolist ()); }}Dessa forma, o controlador não mudou, mas foi retirado do caminho da API. O provedor de módulos independente-api é o cliente que fornecemos ao consumidor. A próxima seção usa o consumidor para consumir.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.