开发门户网站需要注意什么,wordpress浏览统计,汕头网络推广seo方案,长沙企业建站公司一、前言
我们在别的章节中已经详细讲解过eureka注册中心的作用#xff0c;本节会简单讲解eureka作用#xff0c;侧重注册中心的搭建。 Eureka作为服务注册中心可以进行服务注册和服务发现#xff0c;注册在上面的服务可以到Eureka上进行服务实例的拉取#xff0c;主要作用…一、前言
我们在别的章节中已经详细讲解过eureka注册中心的作用本节会简单讲解eureka作用侧重注册中心的搭建。 Eureka作为服务注册中心可以进行服务注册和服务发现注册在上面的服务可以到Eureka上进行服务实例的拉取主要作用就是进行请求时的负载均衡。在注册中心注册了orderService服务但是这个服务有多个实例实例A的端口是8001实例B的端口是8002在我们之前请求orderService服务的时候会指明具体的端口号但指明了端口号请求就总往一台服务上进行发送其他服务就无法分担请求。这样orderService服务的集群就失效了还是单台服务抗下了所有但有了注册中心后我们请求时就不需要声明具体的端口号而是服务名向指明了服务名的服务发起请求就可以了请求会根据默认的请求规则轮询向A、B服务实例发起请求。
以下创建的模块JDK为1.8注意要在Project Structure中设置 ## 二、搭建注册中心
1. 搭建SpringBoot项目
创建一个SpringBoot【cloud-eureka-demo】项目。
版本最好同我的一致
SpringBoot选择2.3.12.RELEASE【这个版本必须搭配JDK1.817不行】
2. 搭建Eureka注册中心
在上面创建好的SpringBoot 项目上新建一个模块【eureka-server】 虽然我们这里是新建模块但是要注意新建模块有两种方式上面创建的是一个独立的模块与【cloud-eureka-demo】并不存在父子模块的关系eureka与其他模块不存在依赖关系应该作为独立模块存在可以单独部署。在微服务项目中各个模块本身就是独立的一个服务所以可以使用这种方式创建项目结构目录直接帮我们创建好了挺省事的。如果要创建父子关系的模块可以使用下面的方式 这里就会让我们选择父模块。 在微服务项目中使用Maven创建具有父子模块关系的项目结构好还是独立的模块好 对于微服务项目通常推荐使用Maven创建具有父子模块关系的项目结构。 使用Maven创建具有父子模块关系的项目可以带来以下几个优势 模块化管理通过父子模块的关系可以将不同的功能或服务划分为独立的子模块并且可以分别进行构建、测试和部署。这样可以提高项目的可维护性和扩展性。注意父子模块的关系并不会影响各个子模块的独立构建和部署。每个子模块都有自己的构建配置和插件配置可以独立进行构建和部署。对于测试也可以针对每个子模块进行独立的测试以保证测试的独立性和有效性。依赖管理通过在父模块中定义公共的依赖和版本信息可以确保各个子模块之间的依赖关系是一致的。这样可以减少冲突和版本不一致的问题并且简化了依赖管理的工作。统一构建和发布使用父模块的pom.xml文件可以统一管理项目的构建配置和插件配置。这样可以确保各个子模块在构建过程中遵循相同的规范和流程并且可以方便地进行整体构建和发布。可重用性父模块可以作为一个通用的框架或基础设施模块提供公共的代码、配置和工具类等供子模块进行复用。这样可以提高代码的可重用性和开发效率。 总之使用Maven创建具有父子模块关系的项目结构可以提供更好的模块化管理、依赖管理和统一构建发布等优势。这种方式适用于较大型的微服务项目或者需要更灵活组织结构的项目。 对于微服务项目使用独立的模块也是一种常见的方式特别是当各个模块对应的是独立的服务时。 使用独立的模块可以带来以下几个优势 独立部署每个模块可以独立进行构建、测试和部署这样可以更灵活地对每个服务进行管理和扩展。如果某个模块需要进行升级或者有故障发生可以只对该模块进行处理而不会影响其他模块。解耦合每个模块可以独立开发和维护它们之间通过定义好的接口进行通信从而实现了解耦合。这样可以提高系统的可维护性和可扩展性也方便团队并行开发。技术栈灵活不同的模块可以选择不同的技术栈和框架来实现根据具体需求选择最适合的技术栈。这样可以充分发挥各个模块的特长并且可以更好地满足业务需求。服务独立性每个模块对应一个独立的服务可以根据需要对每个服务进行独立的水平扩展和负载均衡配置以满足不同的性能和可用性要求。 总结来说使用独立的模块可以提供更好的独立部署、解耦合、技术栈灵活性和服务独立性。这种方式适用于对每个服务的独立性要求较高的微服务项目。 2.1. 版本搭配
引入Eureka依赖需要引入SpringCloudSpringCloud-Hoxton.SR1版本与JDK8搭配
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.lzk/groupIdartifactIdeureka-server/artifactIdversion0.0.1-SNAPSHOT/versionnameeureka-server/namedescriptioneureka-server/descriptionpropertiesjava.version8/java.versionspring-cloud.versionHoxton.SR1/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-server/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build
/project
2.2. 配置文件
spring:application:name: eurekaserverserver:port: 10086eureka:client:# 是否将自身作为一个eureka服务注册register-with-eureka: false# 是否从服务上拉取服务实例fetch-registry: falseservice-url:defaultZone: http://localhost:10086/eureka2.3. 启动类
在启动类上添加EnableEurekaServer注解
SpringBootApplication
EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}2.4. 访问服务
启动服务后如果出现以下错误是版本错误检查项目是否是JDK8
在浏览器上访问http://localhost:10086/出现以下页面就是成功搭建了注册中心。
三、服务注册-提供者
1. 创建SpringBoot项目
创建一个名为【provider-server】的项目。
2. pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.lzk/groupIdartifactIdprovide-server/artifactIdversion0.0.1-SNAPSHOT/versionnameprovide-server/namedescriptionprovide-server/descriptionpropertiesjava.version8/java.versionspring-cloud.versionHoxton.SR1/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactIdversion2.2.1.RELEASE/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project注意 引入的eureka-client为
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency而不是下面这个引入这个依赖服务注册不到注册中心上去
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-netflix-eureka-client/artifactId
/dependency3. 配置文件
application.yml
spring:application:name: userservice
server:port: 8080
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka4. 启动类
在启动类上添加EnableEurekaClient注解用于将服务注册到注册中心上
SpringBootApplication
EnableEurekaClient
public class ProvideServerApplication {public static void main(String[] args) {SpringApplication.run(ProvideServerApplication.class, args);}
}5. UserController
创建userController用于提供服务便于后面测试
RestController
RequestMapping(/user)
public class UserController {GetMapping(/login)public String login(){return 8080 login success;}
}6. 克隆服务
将上面的服务再创建一次服务端口改为8081userController中改为return 8081 login success便于测试。 我们这是创建服务提供者服务提供者是为了给消费者提供服务但二者身份不是唯一的提供者可能也是一个消费者消费者可能也是一个提供者。
7. 服务启动
两个服务启动后会注册到eureka上可以在注册中心看到
四、服务注册-消费者
1. 创建SpringBoot项目
创建一个名为【consumer-server】的服务
2. pom.xml
pom文件同服务提供者的一致
3. 配置文件
spring:application:name: orderservice
server:port: 8083
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka4. 启动类
同提供者一样增加一个EnableEurekaClient注解
5. OrderController
要调用服务提供者提供的服务。 Bean注解将方法返回值注册到Spring容器中Bean要同Component注解或其派生注解共同使用。 RestController
RequestMapping(order)
public class OrderController {BeanLoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}Autowiredprivate RestTemplate restTemplate;GetMapping(/info)public String getOrderInfo(){String url http://userservice/user/login;String info restTemplate.getForObject(url, String.class);return 订单滴滴 info;}
}6. 服务启动访问 访问http://localhost:8083/order/info 由于RestTemplate添加了LoadBalanced注解所以请求会被负载均衡这也是注册中心的作用所在eureka还会进行服务健康监测例如8082端口的userservice服务宕机那么该服务会从服务实例中剔除下次orderservice拉取服务实例时就拉取不到8082的userservice了。 userservice会每隔一段时间默认30秒向eureka-server发起请求报告自己状态称为心跳 当超过一定时间没有发送心跳时eureka-server会认为微服务实例故障将该实例从服务列表中剔除