spring cloud搭建微服务second-fiberhome(四):结合consul和config,进行网关GetWay搭建

在微服务应用中,不管config配置中心,consul注册中,都是在集群内部进行访问。那么对外访问时,微服务也需要相应的机制提供api接口。Getway服务网关就是提供该机制的应用服务。在spring cloud中apiGetway主要功能如下:

● 对外提供服务接口
● 对内根据逻辑调用内部多个接口,进行信息聚合返回给调用者
● 异步调用无需等待反馈的服务

在这里,我们采用spring cloud的zuul做服务网关。具体实现方法,如下:

1.环境:

consul正常运行
rabbitmq正常运行
jdk1.8

上一节中second-consul-config-server服务正常运行

2.创建getway项目, second-consul-getway。

1)新建second-consul-getway maven工程,其中pom如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.fiberhome</groupId>
<artifactId>second-fiberhome</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<artifactId>second-consul-getway</artifactId>
<packaging>jar</packaging>

<name>second-consul-getway</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul-dependencies</artifactId>
<version>1.0.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> 
</project>

在工程中引用了spring-cloud-starter-zuul依赖。
2)创建application.properties

server.port=8080
spring.application.name=first-getway

spring.cloud.consul.host=192.168.56.101
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true

spring.cloud.consul.discovery.serviceName=getway
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.healthCheckUrl=http://192.168.56.1:8080/health
spring.cloud.consul.discovery.healthCheckInterval=10s
spring.cloud.consul.discovery.tags=dev
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.discovery.port=${server.port}

zuul.routes.api-a.path=/second-client/**
zuul.routes.api-a.service-id=second-client

其中

zuul.routes.api-a.path=/second-client/**
zuul.routes.api-a.service-id=second-client

是配置服务网关关联的后台服务,通过consul注册中的second-client进行对接,实现服务的路由功能。
3)创建ConsulGetwayApplication.java

package com.fiberhome;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringCloudApplication
public class ConsulGetwayApplication 
{
    public static void main( String[] args )
    {
        SpringApplication.run(ConsulGetwayApplication.class, args);
    }
}

通过@EnableZuulProxy,实现服务网关注解。

3.创建服务网关client工程,second-consul-getway-client。

1)新建second-consul-getway-client maven工程,其中pom如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.fiberhome</groupId>
        <artifactId>second-fiberhome</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

  <artifactId>second-consul-getway-client</artifactId>
  <packaging>jar</packaging>

  <name>second-consul-getway-client</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

    <dependencies>
  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  </dependency>
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-config</artifactId>
  </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-consul-dependencies</artifactId>
                <version>1.0.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

使用的依赖和其他工程没有多大变化。
2)创建application.properties

server.port=9977

#config
spring.application.name=second-config
spring.cloud.config.profile=dev
#spring.cloud.config.label=master
spring.cloud.config.uri=http://127.0.0.1:8888/
#spring.cloud.config.failFast=true

spring.cloud.consul.host=192.168.56.101
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.enabled=true
spring.cloud.consul.discovery.serviceName=second-client
spring.cloud.consul.discovery.healthCheckUrl=http://192.168.56.1:${server.port}/health
spring.cloud.consul.discovery.healthCheckInterval=10s
spring.cloud.consul.discovery.tags=dev
spring.cloud.consul.discovery.port=${server.port}

#rabbitmq
spring.rabbitmq.host=192.168.56.101
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbiymq.password=guest

spring.cloud.bus.trace.enabled=true

其中spring.cloud.consul.discovery.serviceName=second-client对应的getway服务中的路由名称。
3)创建ConsulGetwayClientApplication.java启动类和VersionController.java配置信息访问类。

ConsulGetwayClientApplication.java

package com.fiberhome;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

VersionController.java

package com.fiberhome.web;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RefreshScope
@RestController
public class VersionController {

    @Value("${version}")
    private String version;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    @RequestMapping(value = "/version", method = RequestMethod.GET)
    public String version() {
        return this.version;
    }
}

4.启动服务

second-consul-getway
second-consul-getway-client

consul结果:
这里写图片描述

通过服务网关访问client端version值
这里写图片描述
由此,可以发现通过服务网关能够访问到client的值。

该工程源码见github:https://github.com/moyu2012/second-fiberhome

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值