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

简介: 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

访问:

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
存储 Java Maven
Spring Cloud Alibaba服务问题之服务报错如何解决
Spring Cloud Alibaba提供了一套在Spring Cloud框架基础上构建的微服务解决方案,旨在简化分布式系统的开发和管理;本合集将探讨Spring Cloud Alibaba在实际应用中的部署和使用技巧,以及该框架常见问题的诊断方法和解决步骤。
|
10月前
|
存储 Dubbo 算法
一.SpringCloudAlibaba极简入门-什么是 Spring Cloud Alibaba
早期在国内做分布式(微服务)应用Dubbo是比较热门的框架,被许多互联网公司所采用,并产生了许多衍生版本,如网易,京东,新浪,当当等等,奈何在2014年10月Dubbo停止维护,在Dubbo停更的时间里Spring Cloud快速追赶上。在2017年9月,阿里宣布重启Dubbo项目,计划对Dubbo进行持续更新维护。2018.2月,阿里将Dubbo捐献给Apache基金会,Dubbo成为Apache孵化器项目。 所以当前微服务架构,Dubbo和SpringCloud比较火,另外还有Thrift、gRPC等等 。很多人把SpringCloud 和Dubbo进行对比,其实两个框架并没有太大的可比
|
3天前
|
消息中间件 Java Maven
Spring Cloud Alibaba 简介
Spring Cloud Alibaba 简介
199 1
|
3天前
|
消息中间件 负载均衡 Java
【从Spring Cloud到Spring Cloud Alibaba,这些改变你都知道吗?】—— 每天一点小知识
【从Spring Cloud到Spring Cloud Alibaba,这些改变你都知道吗?】—— 每天一点小知识
【从Spring Cloud到Spring Cloud Alibaba,这些改变你都知道吗?】—— 每天一点小知识
|
11月前
|
Java Maven Spring
Spring Cloud Alibaba 项目搭建
Spring Cloud Alibaba 项目搭建
604 0
|
12月前
|
Java Spring
Spring Cloud Alibaba源码 - 21 Ribbon 源码解析
Spring Cloud Alibaba源码 - 21 Ribbon 源码解析
100 0
|
12月前
|
Java Spring
Spring Cloud Alibaba源码 - 22 Feign 源码解析
Spring Cloud Alibaba源码 - 22 Feign 源码解析
94 0
|
12月前
|
XML 负载均衡 Java
Spring Cloud Alibaba学习笔记
Spring Cloud Alibaba学习笔记
|
XML Java Nacos
Spring-Cloud-Alibaba的简单使用(一)
Spring-Cloud-Alibaba的简单使用
244 0
|
XML 监控 Dubbo
Spring-Cloud-Alibaba的简单使用(二)
Spring-Cloud-Alibaba的简单使用
230 0