Spring-Cloud-Alibaba的简单使用(三)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: Spring-Cloud-Alibaba的简单使用

1.3 创建service

spring-cloud-alibaba-demo-dubbo-provider-service

pom.xml

xml

<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lzj</groupId>
        <artifactId>spring-cloud-alibaba-demo-dubbo-provider</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>spring-cloud-alibaba-demo-dubbo-provider-service</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->
        <!-- Projects Begin -->
        <dependency>
            <groupId>com.lzj</groupId>
            <artifactId>spring-cloud-alibaba-demo-dubbo-provider-api</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!-- Projects End -->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.lzj.spring.cloud.alibaba.dubbo.provider.ProviderDubboApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

ProviderDubboApplication

java

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

application.yml

yaml

spring:
  application:
    name: dubbo-provider
  main:
    allow-bean-definition-overriding: true
dubbo:
  scan:
    base-packages: com.lzj.spring.cloud.alibaba.dubbo.provider.service
  protocol:
    name: dubbo
    port: 20881
    #使用kryo实现高速序列化
    serialization: kryo
  provider:
  #负载策略
    loadbalance: roundrobin
  registry:
    address: nacos://127.0.0.1:8848

HelloServiceImpl

java

package com.lzj.spring.cloud.alibaba.dubbo.provider.service;
import com.lzj.spring.cloud.alibaba.dubbo.provider.HelloService;
import org.apache.dubbo.config.annotation.Service;
/**
 * @author Zijian Liao
 * @date 2020/1/17 18:48
 * @description
 */
@Service(version = "1.0.0")
public class HelloServiceImpl implements HelloService {
    @Override
    public String hello(String string) {
        return "Hello dubbo!";
    }
}

1.4 更新消费者配置

pom.xml

xml

  <!-- Projects Begin -->
        <dependency>
            <groupId>com.lzj</groupId>
            <artifactId>spring-cloud-alibaba-demo-dubbo-provider-api</artifactId>
            <version>${project.parent.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo-registry-nacos</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!-- Projects End -->

ConsumerController

java

   @Reference(version = "1.0.0")
    private HelloService helloService;
    @GetMapping("/hello/{str}")
    public String hello(@PathVariable String str){
        return "Consumer send hello and reply is:" + helloService.hello(str);
    }

更新配置

yaml

dubbo:
  scan:
  #扫描包
    base-packages: com.lzj.spring.cloud.alibaba.consumer.controller
  protocol:
    name: dubbo
    port: -1
    #使用kryo实现序列化
    serialization: kryo
  registry:
    address: nacos://127.0.0.1:8848

1.使用路由网关

1.1 创建网关GateWay

spring-cloud-alibaba-demo-gateway

pom.xml

xml

<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lzj</groupId>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>spring-cloud-alibaba-demo-gateway</artifactId>
    <packaging>jar</packaging>
    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->
        <!-- Spring Cloud Begin -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!-- Spring Cloud End -->
        <!-- Commons Begin -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!-- Commons Begin -->
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.lzj.spring.cloud.alibaba.gateway.GatewayApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


GatewayApplication

java

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

application.yml

yaml

spring:
  application:
    # 应用名称
    name: gateway
  main:
    allow-bean-definition-overriding: true
  cloud:
    # 使用 Nacos 作为服务注册发现
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    # 路由网关配置
    gateway:
      # 设置与服务注册发现组件结合,这样可以采用服务名的路由策略
      discovery:
        locator:
          enabled: true
      # 配置路由规则
      routes:
        # 采用自定义路由 ID(有固定用法,不同的 id 有不同的功能,详见:https://cloud.spring.io/spring-cloud-gateway/2.0.x/single/spring-cloud-gateway.html#gateway-route-filters)
        - id: provider
          # 采用 LoadBalanceClient 方式请求,以 lb:// 开头,后面的是注册在 Nacos 上的服务名
          uri: lb://service-provider
          predicates:
            # 路径匹配,以 api 开头,直接配置是不生效的,看 filters 配置
            - Path=/api/provider/**
          filters:
            # 此处配置去掉 2 个路径前缀,再配置上面的 Path=/api/provider/**,就能按照 http://localhost:8888/api/provider/** 的方式访问了
            - StripPrefix=2
        - id: consumer
          uri: lb://service-consumer
          predicates:
            - Path=/api/consumer/**
          filters:
            - StripPrefix=2
server:
  port: 8888
logging:
  level:
    org.springframework.cloud.gateway: debug

访问:

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
SQL SpringCloudAlibaba Kubernetes
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
1861 0
SpringCloudAlibaba篇(六)整合Seata(微服务分布式事务nacos+seata)
|
算法 Java 关系型数据库
Springboot yml配置参数加密 ,jasypt自定义解密器(拓展篇)
Springboot yml配置参数加密 ,jasypt自定义解密器(拓展篇)
1338 0
Springboot yml配置参数加密 ,jasypt自定义解密器(拓展篇)
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
464 1
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
28422 0
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
26092 7
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
Java Devops 持续交付
Maven学习笔记(二):Maven基础(基于IDEA)
【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。
710 0
Maven学习笔记(二):Maven基础(基于IDEA)
|
消息中间件 Java 持续交付
Spring Cloud Alibaba 项目搭建步骤和注意事项
Spring Cloud Alibaba 项目搭建步骤和注意事项
2371 0
Spring Cloud Alibaba 项目搭建步骤和注意事项
|
人工智能 监控 测试技术
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
1212 1