Spring Cloud Alibaba 综合集成架构演示,含答案解析

(2)实现 Dubbo 服务

package com.demo.microservice.service1.service;

import com.demo.microservice.service1.api.ConsumerService;

import com.demo.microservice.service2.api.ProviderService;

/**

  • Description:

  • DATE: 2022/1/27 11:13

*/

@org.apache.dubbo.config.annotation.Service

public class ConsumerServiceImpl implements ConsumerService {

@org.apache.dubbo.config.annotation.Reference

ProviderService providerService;

@Override

public String service() {

String service = providerService.service();

return “Consumer invoke |”+service;

}

}

注意:使用@org.apache.dubbo.config.annotation.Service标记dubbo服务

(3)配置 Dubbo 服务

Service2 作为Dubbo服务消费方配置与服务提供方类似,注意,service1不仅是消费方,同时还是服务提供方:

server:

port: ${port:56030} #启动端口 命令行注入

spring:

application:

name: service1

main:

allow‐bean‐definition‐overriding: true # Spring Boot 2.1 需要设定

cloud:

nacos:

discovery:

server‐addr: 127.0.0.1:8848

namespace: 20dd9cd5-8ce6-4f73-8380-dfa3074ce5a8

cluster‐name: DEFAULT

config:

server‐addr: 127.0.0.1:8848 # 配置中心地址

file‐extension: yaml

namespace: 20dd9cd5-8ce6-4f73-8380-dfa3074ce5a8 # 开发环境

group: NACOS_MICROSERVICE_GROUP # xx业务

dubbo:

scan:

dubbo 服务扫描基准包

base‐packages: com.demo.microservice

protocol:

dubbo 协议

name: dubbo

dubbo 协议端口

port: ${dubbo_port:20881}

registry:

address: nacos://127.0.0.1:8848

application:

qos‐enable: false #dubbo运维服务是否开启

consumer:

check: false #启动时就否检查依赖的服务

以上 YAML 内容,dubbo开头的为dubbo服务 的配置:

  • dubbo.scan.base-packages : 指定 Dubbo 服务实现类的扫描基准包,将@org.apache.dubbo.config.annotation.Service注解标注的service暴露为dubbo服务。

  • dubbo.protocol : Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称, port 为dubbo协议端口可以指定多协议,如:dubbo.protocol.rmi.port=1099

  • dubbo.registry : Dubbo 服务注册中心配置,其中子属性 address 的值 “nacos://127.0.0.1:8848”,说明dubbo服务注册到nacos

  • 相当于原生dubbo的xml配置中的 <dubbo:registry address=“10.20.153.10:9090” />

上半部分为SpringCloud的相关配置:

  • spring.application.name : Spring 应用名称,用于 Spring Cloud 服务注册和发现。该值在 Dubbo Spring Cloud 加持下被视作 dubbo.application.name ,因此,无需再显示地配置dubbo.application.name

  • spring.cloud.nacos.discovery : Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口

  • spring.cloud.nacos.config : Nacos 配置中心配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口。

(4)启动服务消费方应用

package com.demo.microservice.service1;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**

  • Description:

  • DATE: 2022/1/27 11:19

*/

@SpringBootApplication

@EnableDiscoveryClient

public class Service1Bootstrap {

public static void main(String[] args) {

SpringApplication.run(Service1Bootstrap.class, args);

}

}

当 Service1Bootstrap 启动后,应用 service1 将出现在 Nacos 控制台界面。

启动成功,观察nacos服务列表

在这里插入图片描述

6、实现 application1调用Service

=========================================================================================

现在service1已暴露dubbo服务并注册到nacos中,下边实现application1调用service1

6.1、引用service1


下边在application1中引用service1

在pom.xml中引入service-1-api的依赖

com.demo.nacos

service‐1‐api

1.0-SNAPSHOT

引入 spring-cloud-starter-dubbo依赖,它会根据接口生成代理对象

com.alibaba.cloud

spring-cloud-starter-dubbo

6.2、实现远程调用


package com.demo.microservice.application1.controller;

import com.demo.microservice.service1.api.ConsumerService;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

/**

  • Description:

  • DATE: 2022/1/27 10:47

*/

@RestController

public class Application1Controller {

private static final Logger log = LoggerFactory.getLogger(Application1Controller.class);

@org.apache.dubbo.config.annotation.Reference

private ConsumerService consumerService;

@GetMapping(“/service”)

public String service(){

log.info(“进入servcie方法。。。”);

String service = consumerService.service();

return “test|”+service ;

}

}

Note:注意:这里的 @Reference 注解是 org.apache.dubbo.config.annotation.Reference

测试:

请求:http://localhost:56020/application1/service

consumerService正常生成代理对象,service1被调用。

7、 实现 Service2

=============================================================================

如上面设计所示,Service2需要暴露dubbo接口以供service1消费,若想在Spring cloud Alibaba中集成并使用

dubbo。

7.1、定义父工程


定义service2父工程,pom.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”>

nacos‐micro‐service

com.demo.nacos

1.0-SNAPSHOT

4.0.0

service‐2

pom

service‐2‐api

service‐2‐server

7.2、定义service-2-api


定义service-2-api工程,pom.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”>

service‐2

com.demo.nacos

1.0-SNAPSHOT

4.0.0

service‐2‐api

并定义服务接口,Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口(interface)来声明,如 ProviderService 接口:

package com.demo.microservice.service2.api;

/**

  • Description:

  • DATE: 2022/1/27 11:40

*/

public interface ProviderService {

String service();

}

7.3、实现service-2-server


(1)初始化 service-2-server Maven 工程

首先,创建 artifactId 名为 service-2-server 的 Maven 工程,并在其 pom.xml 文件中增添 Dubbo Spring Cloud 必要的依赖:

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

service‐2

com.demo.nacos

1.0-SNAPSHOT

4.0.0

service‐2‐server

com.demo.nacos

service‐2‐api

1.0-SNAPSHOT

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

com.alibaba.cloud

spring-cloud-starter-dubbo

以上依赖 artifact 说明如下:

  • service-2-api : 提供 ProviderService 接口的 artifact

  • spring-boot-starter-web : Spring Boot starter artifact ,间接引入 spring-boot artifact

  • spring-cloud-starter-dubbo : Dubbo Spring Cloud Starter artifact ,间接引入 dubbo-spring-bootstarter 等 artifact

  • spring-cloud-starter-alibaba-nacos-discovery : Nacos Spring Cloud 服务注册与发现 artifact

(2)实现 Dubbo 服务

ProviderService 作为暴露的 Dubbo 服务接口,服务提供方 service-2-server 需要将其实现:

package com.demo.microservice.service2.service;

import com.demo.microservice.service2.api.ProviderService;

/**

  • Description:

  • DATE: 2022/1/27 11:47

*/

@org.apache.dubbo.config.annotation.Service

public class ProviderServiceImpl implements ProviderService {

@Override

public String service() {

return “Provider invoke”;

}

}

其中, @org.apache.dubbo.config.annotation.Service 是 Dubbo 服务注解,仅声明该 Java 服务(本地)实现为 Dubbo 服务。 因此,下一步需要将其配置 Dubbo 服务(远程)。

(3)配置 Dubbo 服务

在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。

在这里插入图片描述

同时,Dubbo 远程服务需要暴露网络端口,并设定通讯协议,完整的 YAML 配置如下所示:

server:

port: ${port:56040} #启动端口 命令行注入

spring:

application:

name: service2

main:

allow‐bean‐definition‐overriding: true # Spring Boot 2.1 需要设定

cloud:

nacos:

discovery:

server‐addr: 127.0.0.1:8848

namespace: 20dd9cd5-8ce6-4f73-8380-dfa3074ce5a8

cluster‐name: DEFAULT

config:

server‐addr: 127.0.0.1:8848 # 配置中心地址

file‐extension: yaml

namespace: 20dd9cd5-8ce6-4f73-8380-dfa3074ce5a8 # 开发环境

group: NACOS_MICROSERVICE_GROUP # xx业务

dubbo:

scan:

dubbo 服务扫描基准包

base‐packages: com.demo.microservice

protocol:

dubbo 协议

name: dubbo

dubbo 协议端口

port: ${dubbo_port:20891}

registry:

address: nacos://127.0.0.1:8848

application:

qos‐enable: false #dubbo运维服务是否开启

consumer:

check: false #启动时就否检查依赖的服务

(4)启动服务提供方应用

Dubbo Spring Cloud 引导类与普通 Spring Cloud 应用并无差别,如下所示:

package com.demo.microservice.service2;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**

  • Description:

  • DATE: 2022/1/27 11:49

*/

@SpringBootApplication

@EnableDiscoveryClient

public class Service2Bootstrap {

public static void main(String[] args) {

SpringApplication.run(Service2Bootstrap.class, args);

}

}

在引导 Service2Bootstrap 之前,请提前启动 Nacos 服务器。 当 Service2Bootstrap 启动后,应用 service2将出现在 Nacos 控制台界面。

8、实现service1调用service2

=====================================================================================

8.1、引用service2


在service-1-server中pom文件中添加service-2-api的依赖:

com.demo.nacos

service‐2‐api

1.0-SNAPSHOT

8.2、实现远程调用


package com.demo.microservice.service1.service;

import com.demo.microservice.service1.api.ConsumerService;

import com.demo.microservice.service2.api.ProviderService;

/**

  • Description:

  • DATE: 2022/1/27 11:13

*/

@org.apache.dubbo.config.annotation.Service

public class ConsumerServiceImpl implements ConsumerService {

@org.apache.dubbo.config.annotation.Reference

ProviderService providerService;

@Override

public String service() {

String service = providerService.service();

return “Consumer invoke |”+service;

}

}

测试:

请求:http://localhost:56020/application1/service

application1调用service1,service1调用service2

9、实现api-gateway

==============================================================================

9.1、Zuul介绍


什么是网关?

原来的单体架构,所有的服务都是本地的,UI可以直接调用,现在按功能拆分成独立的服务,跑在独立的一般都在独立的虚拟机上的 Java进程了。客户端UI如何访问?他的后台有N个服务,前台就需要记住管理N个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不服务我们拆分的理念,特别当前台是移动应用的时候,通常业务变化的节奏更快。另外,N个小服务的调用也是一个不小的网络开销。

在这里插入图片描述有了网关作为服务统一入口,就可以避免上述问题,不仅如此,服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑、校验、路由等处理。有了服务网关可以提高微服务的安全性,网关校验请求的合法性,请求不合法将被拦截,拒绝访问。

  • 提供统一服务入口,让微服务对前台透明

  • 聚合后台的服务,节省流量,提升性能

  • 提供安全,过滤,流控等API管理功能

1、什么是Zuul?

Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由、负载均衡、校验过虑等 功能。

官方:https://github.com/Netflix/zuul

2、Zuul与Nginx怎么配合使用?

Zuul与Nginx在实际项目中需要配合使用,如下图,Nginx的作用是反向代理、负载均衡,Zuul的作用是保障微服

务的安全访问,拦截微服务请求,校验合法性及负载均衡。

在这里插入图片描述

9.2、搭建网关工程


初始化 api-gateway Maven 工程

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

nacos‐micro‐service

com.demo.nacos

1.0-SNAPSHOT

4.0.0

api‐gateway

com.alibaba.cloud

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

a开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-jL6oQVRl-1712762004976)]
[外链图片转存中…(img-RnjxK2sl-1712762004977)]
[外链图片转存中…(img-9NyFq74q-1712762004977)]
[外链图片转存中…(img-XBasskhj-1712762004977)]
[外链图片转存中…(img-kUUb6rS0-1712762004978)]
[外链图片转存中…(img-0k9ByNnE-1712762004978)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-wVcwj1FX-1712762004978)]

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

[外链图片转存中…(img-10bGrgy7-1712762004979)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-leowWysl-1712762004979)]

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

[外链图片转存中…(img-bh0ogoeq-1712762004979)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-aLaM1t3N-1712762004979)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值