Spring Cloud实战(一):微服务注册与微服务发现
来源:互联网 发布:php printf函数 编辑:程序博客网 时间:2024/06/06 03:01
没有Spring Cloud,Spring Boot的实用性要大打折扣。
单个微服务虽然开发简单、维护方便,但是没有协作功能的微服务,其实在企业里并没有显著的竞争力,跟NodeJS比起来,JAVA开发微服务并没有多大的优势。
但是有了Spring Cloud,将多个微服务协作起来工作,充分发挥JAVA在分布式计算的优势,那么改变的不仅仅是开发的方式,而是整个服务框架与计算模式的设计方式。
在Spring Cloud里,负责微服务注册与发现的项目是Spring Cloud Netflix项目中的Eureka组件。Eureka分为两大部分,Eureka Server与Eureka Client。很显然,Eureka Server负责管理、协调所有的微服务提供者,即Eureka Client,因此我们要使用创建协作的微服务框架,首先必须创建Eureka Server。
1. 创建Eureka Server
创建Euraka Server最简单的方式莫过于使用SPRING INITIALIZR,配置好基本的项目源数据后,依赖仅仅需要选中“Eureka Server”即可。
在具体的实践中,一定要记得在Spring Boot的启动主类上添加“@EnableEurekaServer”注解,如下:
@SpringBootApplication// 千万不可忘记此注解,否则出现404错误@EnableEurekaServerpublic class MiranaEurekaApplication { public static void main(String[] args) { SpringApplication.run(MiranaEurekaApplication.class, args); }}
将默认的配置文件application.properties改为application.yml,添加如下内容:
server: port: 8761eureka: instance: hostname: localhost client: # 以下两项一定要是false,表明自己是服务器,而不需要从其他主机发现服务 registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ server: waitTimeInMsWhenSyncEmpty: 0
现在即可启动MiranaEurekaApplication,访问http://localhost:8761即可进入服务的状态管理页面。
2. 创建Eureka Server
依旧采用SPRING INITIALIZR,只不过此次依赖选择“Eureka Discovery”,依旧导入maven项目,在主类上添加“@EnableEurekaClient”注解,如下:
@Configuration@ComponentScan@EnableAutoConfiguration@EnableEurekaClient@RestControllerpublic class MiranaAssetApplication { @RequestMapping("/") public String home() { return "Spring Cloud实战"; } public static void main(String[] args) { new SpringApplicationBuilder(MiranaAssetApplication.class).web(true).run(args); }}
配置文件application.yml的内容很简单,只需要指定一个不一样的服务器端口即可,如下:
server: port: 8080eureka: serviceUrl: defaultZone: http://localhost:8761/eureka/spring: application: name: ASSET
此外,为了便于服务的发现,强烈建议添加“spring.application.name”属性,这也是注册的服务ID,也是以后其他微服务端能调用本服务的识别ID。
现在启动MiranaAssetApplication,就会发现此服务已被注册与发现,见下图。
3. 启动多个微服务实例
为了提高服务的健壮性,对于每个微服务,我们可以启动多个实例,对服务的使用者而言,它们是一个统一的整体,唯一能识别它们的就是服务ID,即spring.application.name配置项(不区分大小写),如我们将WEAK服务启动两个实例,如下图:
4. 进一步测试
我们使用微服务的目的在于协作多个服务接口共同工作,所以我们还应该创建其他的微服务程序,如果简单点,可将上述的微服务程序的服务端口改为8081,而且服务ID改为不一样,即可进行简单测试,详细的代码请参见我的示例。
5. 发现服务与消费服务
在spring-cloud中,客户发现与消费服务主要依靠com.netflix.discovery.EurekaClient与org.springframework.web.client.RestTemplate,示例如下:
@Servicepublic class WeakServiceImpl implements WeakService { private EurekaClient discoveryClient; private RestTemplate restTemplate; /** * @param discoveryClient */ @Autowired public WeakServiceImpl(EurekaClient discoveryClient) { super(); this.discoveryClient = discoveryClient; this.restTemplate = new RestTemplate(); } public String serviceUrl() { InstanceInfo instance = discoveryClient.getNextServerFromEureka("ASSET", false); return instance.getHomePageUrl(); } /* (non-Javadoc) * @see com.mirana.cloud.asset.service.WeakService#findAllAsset() */ @Override public List<Asset> findAllAsset() { String url = this.serviceUrl() + Constants.ASSET_LIST; ResponseEntity<List<Asset>> results = this.restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<Asset>>() {}); List<Asset> assets = results.getBody(); return assets; }}
更详细的代码可参见我的示例,依次启动即可进行体验。
结论
Spring Cloud是提升Spring Boot应用场景的催化剂,本次只讲了服务的发现与注册,更多关于服务注册与发现的具体配置与详细内容可参见官方文档,下次我们将继续讲解微服务网关Zuul。
- Spring Cloud实战(一):微服务注册与微服务发现
- Spring Cloud 微服务注册与发现
- Spring Cloud微服务 服务注册与发现
- Spring Cloud 微服务框架之服务注册与发现
- spring Cloud之微服务注册与发现
- Spring Cloud微服务架构—服务注册与发现
- Spring Cloud构建微服务架构服务注册与发现
- Spring Cloud构建微服务架构—注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Spring Cloud构建微服务架构(一)服务注册与发现
- Ubuntu 14.04 编译最新版本strace
- 解决python3写文件时无法处理中文字符的问题
- uva 1343 The Rotation Game_wrong
- 服务端开发or客户端开发的选择
- ES6语法中的let、const及class声明
- Spring Cloud实战(一):微服务注册与微服务发现
- 51Nod
- 机器学习第十四课part2(EM,EM算法用于GMM)
- win10和ubuntu16双系统安装
- stm32的8种输入输出的含义与区别
- Unity 与 ARkit 开发-基础篇
- Access 、Excel、Word中的VBA引用C#或VB.Net创建的DLL
- PHPunset()用法详解
- 安装