文档章节

Spring Cloud构建微服务(一)

老虎是个蛋蛋
 老虎是个蛋蛋
发布于 2018/12/28 18:32
字数 883
阅读 13
收藏 0

Spring Cloud为开发人员提供了快速构建分布式系统中的一些通用模式(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式 会话,群集状态)。 分布式系统的协调导致了锅炉板模式,并且使用Spring Cloud开发人员可以快速地站起来实现这些模式的服务和应用程序。 它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据中心和受管平台,如Cloud Foundry。

中文文档:https://springcloud.cc/

官方文档:http://projects.spring.io/spring-cloud/#quick-start

本篇主要着重介绍Spring Cloud的注册与发现,后期会慢慢深入讲解其他内容

创建服务注册中心

新建一个SpringBoot项目,在pom文件中添加相关依赖

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka-server</artifactId>
	</dependency>
	<!--依赖管理,用于管理spring-cloud的依赖,其中Dalston.SR1是版本号-->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

此处遇到一处坑当时我用的jdk为1.8,springboot版本为1.5.4.RELEASE,项目启动时一直报错,最后发现spring boot 1.4以后 FilterRegistrationBean的位置换到了 org.springframework.boot.web.servlet 下面,于是乎发现以下结论

springboot

<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>

对应

<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>

springboot

<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>

对应

<spring-cloud.version>Dalston.SR1</spring-cloud.version>

果然水很深!!!!!

在Application 类中添加@EnableEurekaServer注解,如下

@EnableEurekaServer
@SpringBootApplication
public class EurekademoApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekademoApplication.class, args);
	}
}

修改application.properties配置文件,eureka 默认自已也作为客户端注册服务,所以我们需要禁止这种行为

eureka.instance.hostname=localhost
server.port=8090
#是否将自身注册
eureka.client.register-with-eureka=false
#如果为true,启动时报警.
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

启动项目,访问http://localhost:8090/ 如果启动成功可以看到以下页面

此时并未发现注册的服务

创建服务提供方

下面我们创建一个服务,并注册到注册中心 首先创建一个springboot项目,在pom文件中添加相关依赖

	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka</artifactId>
	</dependency>
	<!--依赖管理,用于管理spring-cloud的依赖,其中Camden.SR3是版本号-->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

编写一个测试接口,返回服务相关信息

@RestController
public class TestController {

    @Autowired
    private DiscoveryClient client;

    @RequestMapping(value = "/services" ,method = RequestMethod.GET)
    public ServiceInstance services() {
        ServiceInstance instance = client.getLocalServiceInstance();
        for( String s :  client.getServices()){
            System.out.println("services " + s);
            List<ServiceInstance> serviceInstances =  client.getInstances(s);
            for(ServiceInstance si : serviceInstances){
                System.out.println("    services:" + s + ":getHost()=" + si.getHost());
                System.out.println("    services:" + s + ":getPort()=" + si.getPort());
                System.out.println("    services:" + s + ":getServiceId()=" + si.getServiceId());
                System.out.println("    services:" + s + ":getUri()=" + si.getUri());
                System.out.println("    services:" + s + ":getMetadata()=" + si.getMetadata());
            }

        }
        return instance;
    }
}

在启动类中添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class EurekaclientApplication {
	public static void main(String[] args) {
		SpringApplication.run(EurekaclientApplication.class, args);
	}
}

修改application.properties

#指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问
spring.application.name=eureka-service
server.port=2222
#对应服务注册中心的配置内容,指定服务注册中心的位置
eureka.client.serviceUrl.defaultZone=http://localhost:8090/eureka/

启动项目,重新访问http://localhost:8090/

ok!!服务注册成功,我们访问以下定义的接口http://localhost:2222/services

© 著作权归作者所有

老虎是个蛋蛋
粉丝 173
博文 31
码字总数 40085
作品 0
朝阳
高级程序员
私信 提问
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
2018/09/18
511
3
Spring Cloud(一) 服务的注册与发现(Eureka)

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状...

lemonLove
2018/08/11
170
0
简述什么是 Cloud Native

Cloud Native(云原生)是以云架构为优先的应用开发模式。目前,越来越多的企业已经在大规模开始拥抱云,在云环境开发应用、部署应用、发布应用。未来,越来越多的开发者也将采用 Cloud Nati...

waylau
03/04
120
0
FEBS Cloud v1.1 发布,整合 Spring Cloud Alibaba

FEBS Cloud是一款使用Spring Cloud Greenwich.SR3、Spring Cloud OAuth2 & Spring Cloud Alibaba构建的低耦合权限管理系统,前端(FEBS Cloud Web)采用vue element admin构建。FEBS意指:F...

mrbird
09/22
779
0
“Spring三剑客”,助你快速从月入过万的程序员到年薪百万的架构师

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 Spring作为Java开发的事实开发框架,一直以来都被开发者誉为杀手级...

异步社区
2018/05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

谁说多功能和低价格不能兼得?Aspose系列产品1024购买指南请查收!

你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗? 你是否在寻找一款能够在应用程序中文档管理的工具呢? Aspose——支持100多种文件格式创建、编辑、转换和打印! 往下看,找一找哪...

mnrssj
27分钟前
3
0
hbase客户端API

本章介绍用于对HBase表上执行CRUD操作的HBase Java客户端API。 HBase是用Java编写的,并具有Java原生API。因此,它提供了编程访问数据操纵语言(DML)。 HBaseConfiguration类 添加 HBase 的配...

水木星辰
27分钟前
3
0
[插件化开发] 1. 初识OSGI

初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解...

IsaacZhang
27分钟前
4
0
Webstorm 环境使用 nuxt.js 做开发,@ 和 ~ 别名配置

好的IDE + 好的代码提示 = 高效率的开发 webstorm 设置@和~别名,有助于代码查看和跳转. step 0 在项目下创建一个webpack.config.js,内容如下: const path = require('path')module.exp...

皇虫
31分钟前
3
0
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇

上一期我们介绍了如何基于 Knative Serverless 技术实现天气服务-上篇,首先我们先来回顾一下上篇介绍的内容: 通过高德天气 API 接口,每隔 3 个小时定时发送定时事件,将国内城市未来 3 天...

Mr_zebra
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部