Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4450396
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: Java

2018-09-17 15:17:21


我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo【】【】,但是小伙伴们应该也看到了,阿里的dubbo无法单独完成工作,我们还要借助于Apache上的开源框架zookeeper(不是必须,但是最佳实践莫过于zookeeper),使用zookeeper作为服务注册中心,才能实现一个较好的分布式应用。与dubbo不同的是,Spring Cloud是一个一站式分布式框架,Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。那么今天我希望通过一个简单的案例带小伙伴们来了解下Spring Cloud。


OK,那么本文我主要想介绍下在Spring Cloud中使用Eureka搭建一个服务注册中心,然后再向其中注册服务。由于Spring Cloud是在Spring Boot的基础上构建分布式服务的,所以阅读本文需要有一点Spring Boot的知识储备,如果小伙伴们对Spring Boot尚不太熟悉的话,可以先参考下【】。
OK,那么上面所提到的是阅读本文所需要具备的基础知识,在此基础之上我们来看看怎么样利用Spring Cloud中的Eureka来搭建服务注册中心。

首先我要说的是Spring Cloud并不是一个东西,和Hadoop类似,Spring Cloud也包含了许多个子项目,我们今天要看的Eureka只是其中的一个子项目,Eureka的功能有点类似于我们之前写过的zookeeper,它是一个服务治理组件,包含了服务注册中心、服务注册与发现机制。其他的组件我们这里先不做介绍,后面的系列文章都会一一提及到。

OK,废话说了一箩筐,上代码吧。

  

创建服务注册中心

创建一个普通的Spring Boot工程

首先我们需要创建一个普通的Spring Boot工程,命名为eureka-server,普通到什么程度呢?就是一个starter都不需要添加,创建成功之后就只引用了一个父starter。

添加Eureka依赖

工程创建成功之后,向pom.xml文件中添加eureka-server的依赖,目前eureka的稳定版本是Dalston.SR3,添加完依赖之后,pom.xml文件如下所示:


    4.0.0

    org.sang
    eureka-server
    0.0.1-SNAPSHOT
    jar

    eureka-server
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.6.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.cloud
            spring-cloud-starter-eureka-server
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.SR3
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

那么这里依赖的添加我主要参考了Eureka官网的 。

启动一个服务注册中心

启动一个服务注册中心的方式很简单,就是在Spring Boot的入口类上添加一个@EnableEurekaServer注解,如下:

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

配置服务注册中心

最后我们再做一点简单的配置就可以了,配置就写在Spring Boot的配置文件application.properties中,写法如下:

server.port=1111
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone={eureka.instance.hostname}:${server.port}/eureka/

OK,那么关于这几行注释,我说如下几点:

1.server.port=1111表示设置该服务注册中心的端口号
2.eureka.instance.hostname=localhost表示设置该服务注册中心的hostname
3.eureka.client.register-with-eureka=false,由于我们目前创建的应用是一个服务注册中心,而不是普通的应用,默认情况下,这个应用会向注册中心(也是它自己)注册它自己,设置为false表示禁止这种默认行为
4.eureka.client.fetch-registry=false,表示不去检索其他的服务,因为服务注册中心本身的职责就是维护服务实例,它也不需要去检索其他服务

测试

OK,做完这一切之后,我们就可以启动这一个Spring Boot 服务,服务启动成功之后,在浏览器中输入:就能够看到如下页面:

  

OK,看到上面这个页面之后,表示你的服务注册中心已经搭建好了。

小结

我们之前专门有一篇博客介绍如何在Linux上安装zookeeper【】,但是对于Eureka却不存在这样的问题,因为Eureka中的服务注册中心实际上是一个Spring Boot工程,而Spring Boot工程我们知道可以直接打成一个jar包,然后java -jar命令就可以运行,不管Windows还是Linux上,运行方式都是一致的。

注册服务提供者

OK,那么现在服务注册中心有了之后,我们可以考虑向这个服务注册中心注册一个服务提供者了。

创建一个新的Spring Boot工程

还是创建一个Spring Boot工程,这次创建比之前创建多一个步骤,在创建的时候选中web的starter,我们来创建一个web工程,在IntelliJ IDEA中创建的时候选中web,如下:

  

添加Eureka依赖

在创建好的工程中,我们需要添加Eureka依赖,添加方式如下:


    4.0.0
    org.sang
    provider
    0.0.1-SNAPSHOT
    jar
    provider
    Demo project for Spring Boot
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.6.RELEASE
         
    
    
        UTF-8
        UTF-8
        1.8
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Dalston.SR3
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

创建应用的入口

这是一个web工程,所以我们添加一个Controller,在该Controller中提供一个访问入口,如下:

@RestController
public class HelloController {
    private final Logger logger = Logger.getLogger(getClass());
    @Autowired
    private DiscoveryClient client;

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String index() {
        List instances = client.getInstances("hello-service");
        for (int i = 0; i < instances.size(); i++) {
            logger.info("/hello,host:" + instances.get(i).getHost() + ",service_id:" + instances.get(i).getServiceId());
        }
        return "Hello World";
    }
}

这里创建服务之后,在日志中将服务相关的信息打印出来。

激活Eureka中的DiscoveryClient

在Spring Boot的入口函数处,通过添加@EnableDiscoveryClient注解来激活Eureka中的DiscoveryClient实现(因为我们在HelloController中注入了DiscoveryClient)。

@EnableDiscoveryClient
@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

配置服务名称和注册中心地址

最后的最后,我们在application.properties文件中配置一下服务名和注册中心地址即可,如下:

spring.application.name=hello-service
eureka.client.service-url.defaultZone=/eureka

这两行代码的含义很简单,我就不多说了。

测试

做完这一切之后,我们就可以来测试了,直接运行这个Spring Boot工程,运行成功之后,我们刷新刚才的,就可以看到有一个服务已经注册成功了。如下:
  

同时,我们查看这个服务提供者运行日志,也可以看到服务的信息,如下:

  

小结

OK,如此之后,我们一个服务注册中心就搭建成功了,同时也有一个服务提供者成功的注册了。但是这样还有一个小问题,那就是我们这里是一个单节点的服务注册中心,一旦发生了故障整个服务就瘫痪了,所以在实际应用中,我们需要搭建高可用注册中心,那么关于高可用注册中心如何搭建的问题,我们将在下篇文章中来介绍。

本文案例地址:  

更多JavaEE资料请关注公众号:

  

以上。。

阅读(856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~