springcloud整合consul

新建Module支付服务provider8006

cloud-providerconsul-payment8006 

 pom文件 

 version已经交给父工程管理 

 <!-- 统一管理jar包版本 -->
    <!-- 统一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>8.0.16</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.atguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-providerconsul-payment8006</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

yml文件

###consul服务端口号
server:
  port: 8006

spring:
  application:
    name: consul-provider-payment
  ####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

启动类

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

controller类

@RestController
@Slf4j
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/consul")
    public String paymentInfo()
    {
        return "springcloud with consul: "+serverPort+"\t\t"+ UUID.randomUUID().toString();
    }
}

测试结果  :

http://localhost:8006/payment/consul

新建Module消费服务order80 

cloud-consumerconsul-order80

 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>cloud2020</artifactId>
        <groupId>com.atguigu.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-providerconsul-payment8006</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--SpringCloud consul-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

yml文件

###consul服务端口号
server:
  port: 80

spring:
  application:
    name: cloud-consumer-order
  ####consul注册中心地址
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        #hostname: 127.0.0.1
        service-name: ${spring.application.name}

启动类

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul或者zookeeper作为注册中心时注册服务
public class OrderConsulMain80
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderConsulMain80.class,args);
    }
}

config类

@Configuration
public class config {
    @Bean
    @LoadBalanced
    public RestTemplate RestTemplate()
    {
        return new RestTemplate();
    }

}

controller类

@RestController
public class OrderZKController
{
    public static final String INVOKE_URL = "http://consul-provider-payment"; //consul-provider-payment

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/consumer/payment/consul")
    public String paymentInfo()
    {
        String result = restTemplate.getForObject(INVOKE_URL+"/payment/consul", String.class);
        System.out.println("消费者调用支付服务(consule)--->result:" + result);
        return result;
    }

}

测试结果 :

 http://localhost:8500/ui/dc1/services

 

http://localhost/consumer/payment/consul

 

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Spring Cloud Gateway是Spring Cloud生态系统中的一个全新项目,它基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术,旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud的网关,提供了一种简单而有效的方式来管理API请求的路由、过滤和转换。它可以与Eureka、Consul、Zookeeper等服务注册中心集成,支持动态路由、限流、熔断等功能,可以帮助我们快速构建高可用、高性能的微服务架构。 ### 回答2: Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,它基于 Spring 5.0,是一个独立的路由和过滤器网关,领域涵盖协议转换、流量整形、安全、监控/指标、日志等。它可以使用 Java 开发,也可以使用 Groovy 开发。它旨在为微服务架构提供一种简单而有效的方式,以实现路由、监控和安全等诸多目标功能。 Spring Cloud Gateway 的一个关键特性是能够动态路由,它可以根据业务实现和运行情况以及使用者的需求,对请求进行处理和转发。同时,Spring Cloud Gateway 不仅支持各种协议的路由和服务转发,还提供了强大的过滤器机制,可以在请求和响应阶段进行访问控制、操作转换等操作。 使用Spring Cloud Gateway整合Gateway可以快速构建高性能的微服务应用,并实现各种路由和过滤器功能。 首先安装 Spring Cloud Gateway 依赖,同时在pom.xml文件中添加如下代码: ``` <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies> ``` 接下来,需要添加路由规则。Spring Cloud Gateway 支持两种方式添加路由规则,一种是采用配置文件方式,另外一种是采用编程方式。对于较为简单的场景,采用配置文件方式会更为便捷和方便。配置文件需要写在 application.properties(或者 application.yml)或自定义的配置文件中,在其中配置路由规则。可以通过在配置文件 application.yml 中,指定 routes 来定义路由: ``` spring: cloud: gateway: routes: - id: demo uri: https://example.com/ predicates: - Path=/demo ``` 上述配置的作用是当访问 http://localhost:8080/demo 时,转发到 https://example.com/。 需要注意的是,Spring Cloud Gateway 的路由规则是可以动态修改的,只需要将新增、修改、删除的路由规则写入相应的配置文件,无需重启服务即可生效。 最后,需要添加过滤器,Spring Cloud Gateway 提供了两种过滤器,一种是全局过滤器,另外一种是基于路由的过滤器。全局过滤器能够匹配所有路由,而基于路由的过滤器仅匹配特定的路由。在使用过滤器时,需要注意过滤器的执行顺序和配置顺序有关,过滤器的执行顺序范围为0-10000。 Spring Cloud Gateway 实现了网关的基本功能,可以轻松地实现反向代理、路由转发、日志监控等功能,为 Spring Cloud 应用带来了更高效的边缘服务体系。通过使用 Spring Cloud Gateway 整合 Gateway,可以更迅速地进行微服务架构的开发和部署。 ### 回答3: 随着微服务的广泛应用,微服务架构下的网关服务也逐渐变得重要起来。Spring Cloud Gateway作为一种轻量级、高效、易扩展的网关服务,已成为业界热门的选择。在使用Spring Cloud Gateway时,需要将其与Spring Cloud的其它组件进行整合,以达到更好的服务支持和扩展性。 一、整合方式 1.在pom.xml文件中加入以下依赖: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> ``` 2.配置路由规则,可以在application.yml或application.properties文件中进行配置,在以下例子中,我们定义了一个简单的路由规则: ``` spring: cloud: gateway: routes: - id: route1 uri: http://example.org predicates: - Path=/foo/** - id: route2 uri: http://localhost:8080 predicates: - Path=/bar/** ``` 这里我们定义了两个路由规则,route1和route2,分别匹配以/foo和/bar开头的请求。其中uri属性指定了路由的目标地址,predicates属性指定了路由规则。 3.自定义过滤器,Spring Cloud Gateway提供了Filter接口,可以实现基于请求和响应的过滤器。以下是一个自定义的LoggingFilter,用来记录请求和响应的日志: ``` @Component public class LoggingFilter implements GlobalFilter, Ordered { private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); private static final String START_TIME = "startTime"; @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { exchange.getAttributes().put(START_TIME, System.currentTimeMillis()); return chain.filter(exchange).then( Mono.fromRunnable(() -> { Long startTime = exchange.getAttribute(START_TIME); if (startTime != null) { log.info(exchange.getRequest().getURI().getRawPath() + ": " + (System.currentTimeMillis() - startTime) + " ms"); } }) ); } @Override public int getOrder() { return -1; } } ``` 二、总结 Spring Cloud Gateway整合Spring Cloud的组件和功能,提供了一种轻量级、高效、易扩展的网关服务。通过配置路由规则和自定义过滤器,可以实现网关的基本功能,并且可以方便地扩展和定制化。同时,Spring Cloud Gateway还提供了丰富的插件,支持更多的业务场景和功能需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个风轻云淡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值