`

Spring Cloud基于Eureka的微服务集群实现

阅读更多
      Spring Cloud中集成了Eureka,因此可以在Spring Boot项目中使用Eureka的分布式服务,在本例中我们模拟Eureka的伪分布式的使用,端口分别为8761(默认),8762,8763,同时也需要修改host文件,指定为:

127.0.0.1 peer1

127.0.0.1 peer2

127.0.0.1 peer3

1、在Spring Cloud中启用Eureka,需在pom文件中加入以下依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

 

2、接下来需要修改项目的配置文件,因模拟三个节点,也就需要三个配置文件,其中只是端口号、hostname的指定有所不同,application-s1.yml具体配置如下:

server:
  port: 8761
spring:
  application:
    name: EurekaServer
eureka:
  instance:
    hostname: peer1 #对应的hostname
  client:
    service-url:
      defaultZone: #三个服务节点互联
        http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/

 application-s2.yml,application-s3.yml中修改对应端口与hostname即可

3、mani函数中加入Eureka服务注解

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

 4、使用maven打包,生成可运行的jar文件,执行以下命令

spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s1

spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s2

spring-cloud>java -jar eureka-server\target\eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=s3

启动时会报 Connect to peer3:8763 timed out之类的异常,待服务全启动后控制台窗口出现2017-04-12 16:46:14.991  INFO 13132 --- [nio-8761-exec-6] c.n.e.registry.AbstractInstanceRegistry  : Registered instance EUREKASERVER/*.*.*.144:EurekaServer:8
763 with status UP (replication=true),说明服务已启动成功,打开http://localhost:8761/,可以看到集群运行正常


:在配置文件中如果不使用域名的方式,而指定localhost或者ip(127.0.0.1/外网ip),服务能够正常启动,但分片服务总显示在unavailable-replicas中,因此在host中指定了相应的域名做服务区分

5、添加对外服务接口,新建一个controller,并打印出当前调用服务的信息

@RestController
public class AppServiceController {

	private final Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private DiscoveryClient client;

	@SuppressWarnings("deprecation")
	@RequestMapping("/hello/{user}")
	public String hello(@PathVariable("user") String user) {
		ServiceInstance instance = client.getLocalServiceInstance();
		logger.info("/add, host:" + instance.getHost() + ", port: " + instance.getPort() + ", service_id:"
				+ instance.getServiceId() + ", user:" + user);
		return "Hello " + user;
	}
}

 6、新建客户端调用工程,在工程中访问Eureka集群提供的rest服务,该工程是一个普通的Spring Boot项目,pom中添加以下依赖

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

 7、配置文件中将该工程注册属性设置为false,不在Eureka集群中注册

spring:
  application:
    name: eureka-client
eureka:
  client:
    register-with-eureka: false

  server:
    name: eurekaServer

 8、客户端的主类中通过服务名访问Eureka集群,默认负载均衡策略为轮询

@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class EurekaClientApp {
	
	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}
	
	@Value("${eureka.server.name}")
	private String eurekaServer;
	
	@Autowired
	RestTemplate restTemplate;

	@RequestMapping(value = "/{user}")
	public String hello(@PathVariable("user") String user) {
		return restTemplate.getForEntity("http://" +eurekaServer +"/hello/"+ user, String.class).getBody();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApp.class, args);
	}
}

 9、访问http://localhost:8080/tom,页面打印 Hello tom,可以变换参数,在服务端显示访问的日志信息

2017-04-12 18:12:31.888  INFO 13088 --- [nio-8762-exec-3] org.eureka.server.AppServiceController   : /add, host:peer2, port: 8762, service_id:EurekaServer, user:tom

2017-04-12 18:13:03.310  INFO 6448 --- [nio-8763-exec-2] org.eureka.server.AppServiceController   :

/add, host:peer3, port: 8763, service_id:EurekaServer, user:jack

2017-04-12 18:13:24.342  INFO 12992 --- [nio-8761-exec-6] org.eureka.server.AppServiceController   : /add, host:peer1, port: 8761, service_id:EurekaServer, user:anny

访问三次,可以看到服务端分别被访问一次,使用了轮询策略

 

项目代码地址:https://github.com/hjguang/spring-cloud

该项目中包含其他工程,可以使用以下命令只install Eureka项目

spring-cloud>mvn install -pl eureka-server,eureka-client -DskipTests=true

 

分享到:
评论

相关推荐

    spring cloud netflix eureka微服务注册中心

    Spring Cloud Netflix Eureka是Spring Cloud框架的一个重要组件,主要用于实现微服务之间的服务发现与注册。在微服务架构中,服务注册中心是整个系统的核心部分,它帮助各个微服务实例互相发现并进行通信。Eureka是...

    03Spring Cloud项目实战微服务整合spring boot视频教程课件

    Spring Cloud作为一套微服务解决方案,与Spring Boot相结合,为开发者提供了构建分布式系统中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等...

    spring boot 、spring cloud 、docker 微服务实战

    Spring Cloud是基于Spring Boot实现的一套微服务解决方案,它提供了众多用于构建分布式系统的工具和服务,例如服务发现、配置中心、熔断器、负载均衡、API网关等。Eureka用于服务注册与发现,Zuul或Gateway作为API...

    SpringCloud微服务可运行开发环境、高可用微服务集群部署源码及使用手册

    本SpringCloud微服务用到Spring Cloud Netflix,包含微服务中心(eureka)、微服务提供者(service)、微服务消费者(ribbon、feign,内含断路器)、微服务网关(zuul)、管理系统(web-manager),以及以此组件配置...

    springcloud注册中心Eureka集群示例代码.zip

    在这个示例中,我们有 `springcloud-eureka` 和 `springcloud-eureka2` 两个 Eureka 服务器实例,它们共同构成了 Eureka 集群。这样做的目的是提高服务注册中心的高可用性,避免单点故障。配置时,每个 Eureka ...

    Spring Cloud 之 Eureka集群搭建指南-源码

    配置`spring.cloud.service-discovery.eureka.instance-id`为唯一的实例ID,以便Eureka集群识别。 7. **服务消费者发现** 同样创建一个服务消费者应用,通过Eureka Client发现并调用服务提供者。使用`@...

    springCloud+eureka

    综上所述,"springCloud+eureka" 主要是利用 Spring Cloud 的 Eureka 模块构建微服务架构,实现服务的注册与发现,从而简化了分布式系统中的服务治理。通过启动 Eureka Server 和两个客户端,可以演示服务间的通信和...

    Spring Cloud 之 Eureka集群整合Zuul、Feign-源码

    在本教程中,我们将深入探讨如何在Spring Cloud框架下实现Eureka集群,并整合Zuul和Feign。首先,我们要理解这些组件的核心功能。 **Eureka**是Spring Cloud中的服务发现组件,它允许微服务之间互相发现并进行通信...

    基于SpringCloud的微服务实战案例-基于Dubbo的微服务开发基础框架

    ### 基于SpringCloud的微服务实战案例与Dubbo微服务开发基础框架解析 #### 一、SpringCloud微服务实战案例—simplemall 在现代软件开发领域,微服务架构因其高灵活性、易于扩展和独立部署等优势而备受青睐。其中,...

    (完整版)基于SpringCloud微服务系统设计方案.pdf

    SpringCloud微服务系统设计方案是构建大规模、高可用应用程序的一种现代架构。它基于Spring Boot和Spring Framework,旨在简化微服务的开发、部署和管理。本文将深入探讨微服务的本质、面临的挑战、架构设计以及核心...

    springcloud-eureka-server.zip

    "springcloud-eureka-server.zip"项目提供了优化的配置,可快速应用于实际开发环境中,帮助开发者更专注于业务逻辑的实现。通过深入理解和实践Eureka Server,我们可以更好地驾驭微服务,构建稳定可靠的分布式系统。

    springcloud入门代码基于Spring Cloud搭建Eureka高可用集群

    在本文中,我们将深入探讨如何使用...通过理解Eureka的工作机制和Spring Cloud的集成方式,你可以轻松地搭建自己的Eureka集群,并实现服务的注册与发现。实践中,还要注意监控Eureka服务器的状态,确保服务的稳定运行。

    springcloud-搭建微服务(聚合工程)及配置Eureka(搭建Eureka集群)+负载均衡(Ribbon)调用eureka服务

    以上就是关于“springcloud-搭建微服务(聚合工程)及配置Eureka(搭建Eureka集群)+负载均衡(Ribbon)调用eureka服务”的详细解释。通过这样的配置,我们可以构建出一个稳定、高可用的微服务架构,其中的服务能够自动...

    分布式集群springBoot+springCloud+Eureka+Feign.zip

    本项目以"分布式集群springBoot+springCloud+Eureka+Feign.zip"为主题,旨在创建一个基于Spring Boot、Spring Cloud、Eureka和Feign的基础框架。下面将详细介绍这些技术以及如何将它们整合到一起。 首先,Spring ...

    spring-cloud-eureka集群的搭建.zip

    本文将详细讲解如何搭建一个基于Spring Cloud 2.0的Eureka集群,以便实现多个Eureka注册中心的高可用性。 首先,我们要理解Eureka的基本概念。Eureka是一个基于REST的服务,用于定位服务,以实现云端的应用程序的...

    Spring Cloud Eureka Server

    Spring Cloud Eureka Server是Spring Cloud框架中的一个关键组件,它主要负责服务的注册与发现,是微服务架构中实现服务治理的重要工具。Eureka Server作为服务注册中心,为其他微服务提供服务注册和发现的能力,...

    《深入理解Spring Cloud与微服务构建》word版本

    Spring Cloud是基于Spring Boot的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作的简单...

    基于SpringCloud的java微服务项目骨架.zip

    【标题】"基于SpringCloud的Java微服务项目骨架"是一个示例项目,它演示了如何构建和组织一个基于Spring Cloud的微服务架构。Spring Cloud是一个集合工具,它为开发人员在分布式系统(如配置管理、服务发现、断路器...

    SpringCloud Eureka集群项目

    本项目是一个SpringCloud Eureka集群的示例,旨在帮助开发者了解如何设置和运行一个包含双节点的Eureka集群,以实现高可用的服务注册中心。 首先,我们来理解Eureka的基本工作原理。Eureka服务器作为服务注册中心,...

Global site tag (gtag.js) - Google Analytics