[java] 微服务架构连载No1 spring-cloud服务发现之Eureka

前言

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

Eureka 服务发现:其他可以服务可以向Eureka注册实例,客户端可以使用Spring管理的bean来发现实例,相同技术有Dubbo, zookeeper

Eureka架构图预览(图中Registry 注册中心位置)



使用Eureka完成服务发现步骤讲解

 新建spring-cloud-eureka-server 工程(服务发现)

pox.xml 添加eureka-server依赖 ,并添加 docker-maven-plugin ,可以通过 mvn clean package docker:build 直接打包成执行镜像,配置如下

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <configuration>
                    <imageName>${artifactId}-${version}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-- defined in spring-cloud-starter-parent pom (as documentation hint),
                    but needs to be repeated here -->
                <configuration>
                    <mainClass>bhz.springcloud.EurekaApplication</mainClass>
                    <requiresUnpack>
                        <dependency>
                            <groupId>com.netflix.eureka</groupId>
                            <artifactId>eureka-core</artifactId>
                        </dependency>
                        <dependency>
                            <groupId>com.netflix.eureka</groupId>
                            <artifactId>eureka-client</artifactId>
                        </dependency>
                    </requiresUnpack>
                </configuration>
            </plugin>
          
        </plugins>
    </build>



功能配置文件application.yml euraka相关配置如下

spring:
  application:
    name: eureka
  profiles:
    active: dev
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
server:
  port: 8003

解释  name:访问服务中心名称

         defaultZone: 其他服务注册到服务中心路径

 prot : 访问服务中心路径


编写类,开启服务中心配置

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

新建spring-cloud-provider工程(服务注册)  端口7001

pom.xml 添加eureka依赖

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

application.yml 配置

provider-service :服务名称 
defaultZone: 注册服务到配置中心地址


代码如下
spring:
  application:
    name: provider-service

server:
  port: 7001
  context-path: /

eureka:
  client:
    service-url:
     defaultZone: http://127.0.0.1:8001/eureka/


启动类ProviderApplication ,  EnableDiscoveryClient注解开启服务发现

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {

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


添加 IndexController发布服务

@RestController
public class IndexController {

    @RequestMapping(value = "/hello")
    public String hellow(){
        return "hello word " ;
    }
}


新建 spring-cloud-consumer工程(服务调用)  端口7002

pom.xml 添加 eureka,ribbon依赖

 <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>


配置 application.yml 

server:
  context-path: /
  port: 7002
spring:
  application:
    name: consumer-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8001/eureka/

添加ProviderApplication ,  EnableDiscoveryClient注解开启服务发现

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    };

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


编写服务调用类
@RestController
public class HelloController {

    @Autowired
    private RestTemplate restTemplate;


    @RequestMapping(value = "getway")
    public String getWay(){
        ResponseEntity<String> result=restTemplate.getForEntity("http://provider-service/hello",String.class);
        System.err.println("------------ "+ result + "--------------------");
        return "调用成功";
    }


    @RequestMapping(value = "geturl")
    public String getUrl(){
        RestTemplate urlTemplate=new RestTemplate();
        ResponseEntity<String> result=urlTemplate.getForEntity("http://localhost:7001/hello",String.class);
        System.err.println("------------ "+ result + "--------------------");
        return "调用成功";
    }
}

说明:

方法getway() 是通过服务中心管道调用服务,无需指定ip和端口,交由服务中心转发

方法getUrl 是通过原生http请求调用接口,没有走服务中心通道


访问服务发现地址 localhost:8001   ,  调用接口地址:  http://localhost:7002/getway




说明:

 application中 三个工程 eureka-server, provider-server , consumer-server 已经注册到配置中心 ,并统一交由配置中心管理服务,

内部可自由调用服务, 为接下来的 负载均衡,网关,断路器,等等...做准备


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源14

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值