我本神探 紧急营救,钨钢圆棒,巴格达电池
eureka是netflix开源的基于rest的服务治理方案,分为server端和client端,server端为注册中心,其他微服务通过client端连接server端进行服务的注册和发现。
创建父模块sc-parent,pom.xml:
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid> com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> <packaging>pom</packaging> <!-- 继承spring boot的默认值 --> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.6.release</version> <relativepath /> <!-- lookup parent from repository --> </parent> <properties> <!-- 降低maven-jar-plugin插件版本,防止版本不匹配导致的pom.xml第一行报错 --> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencies> <!-- 添加web应用依赖 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> <dependencymanagement> <dependencies> <!-- springcloud依赖 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>greenwich.sr2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencymanagement> <build> <plugins> <!-- 打可执行jar包插件 --> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> <!-- 指定编译插件使用的jdk版本 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-eureka</artifactid> <dependencies> <!-- eureka服务端依赖 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid> </dependency> </dependencies> </project>
package eureka; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; //声明该类为springboot服务的入口 @springbootapplication //声明该微服务为注册中心,提供服务发现和注册的功能 @enableeurekaserver public class eurekaapplication { public static void main(string[] args) { springapplication.run(eurekaapplication.class, args); } }
server: port: 8080 #当前服务端口 eureka: instance: hostname: localhost #当前eureka实例主机名 client: registerwitheureka: false #表示不向注册中心注册自己 fetchregistry: false #表示此客户端不需要从eureka注册中心获取eureka注册表信息 serviceurl: defaultzone: http://localhost:8080/eureka/ ##eureka对外提供的地址(客户端连接的地址)
其他配置信息可以参考eurekainstanceconfigbean和eurekaclientconfigbean两个配置类
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-provider</artifactid> <dependencies> <!-- eureka客户端依赖,用于连接服务端进行服务注册和发现 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> </project>
package provider; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplication public class providerapplication { public static void main(string[] args) { springapplication.run(providerapplication.class, args); } }
package provider.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; @requestmapping("/book") @restcontroller public class bookcontroller { @getmapping("/list") public string getbooklist(){ //模拟从service返回数据 return "[\"java入门到放弃\",\"c++入门到放弃\",\"python入门到放弃\",\"c入门到放弃\"]"; } }
server: port: 8081 spring: application: name: sc-provider #注册到eureka注册中心上的服务名称,对应eureka界面上的application列 eureka: client: serviceurl: defaultzone: http://localhost:8080/eureka/ #注册中心的访问地址 instance: preferipaddress: true #表示将自己的ip注册到eureka注册中心。默认为false,表示将hostname注册到注册中心
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>com.cf</groupid> <artifactid>sc-parent</artifactid> <version>0.0.1-snapshot</version> </parent> <artifactid>sc-consumer-discovery</artifactid> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> </dependencies> </project>
package consumer; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate; @springbootapplication public class consumerdiscoveryapplication { public static void main(string[] args) { springapplication.run(consumerdiscoveryapplication.class, args); } @bean public resttemplate resttemplate(){ return new resttemplate(); } }
package consumer.controller; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.cloud.client.serviceinstance; import org.springframework.cloud.client.discovery.discoveryclient; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.client.resttemplate; @restcontroller public class consumerdiscoverycontroller { @autowired private discoveryclient discoveryclient; @autowired private resttemplate resttemplate; @getmapping("/getbooklist") public string getbooklist(){ //通过服务名获取实例信息 list<serviceinstance> list = discoveryclient.getinstances("sc-provider"); if (list != null && list.size() > 0 ) { //调用服务,并返回服务结果 return resttemplate.getforobject(list.get(0).geturi() + "/book/list", string.class); } return null; } }
server: port: 8082 spring: application: name: sc-consumer-discovery eureka: client: registerwitheureka: false #在本实例中消费者不提供服务,所以无需到注册中心注册。在实际应用中,消费者也可能是提供者。 serviceurl: defaultzone: http://localhost:8080/eureka/
在传统的应用程序中,都是把提供者的网络地址硬编码在代码中,导致提供者和消费者耦合度高,当提供者网络地址发生了变化,则需要修改消费者配置并重新发布。eureka起到了解耦的作用,提供者到eureka注册中心中注册,消费者从eureka注册中心中获取提供者的网络地址并进行调用,当提供者网络地址变更时会重新到注册中心注册。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
浅析我对 String、StringBuilder、StringBuffer 的理解
使用IDEA搭建SSM框架的详细教程(spring + springMVC +MyBatis)
Springboot整合freemarker 404问题解决方案
引入mybatis-plus报 Invalid bound statement错误问题的解决方法
网友评论