Dubbo服务调用实现
本文利用springCloudAlibaba实现dubbo分布式服务的调用。服务通过网关进行访问,注册中心采用阿里开原的nacos。
一、安装nacos
下载地址:https://nacos.io/zh-cn/docs/quick-start.html
安装方式有源码安装和jar包安装,我这里选择的是jar包的安装方式。
下载下来后,修改application.properties文件中的数据库连接。
修改启动脚本中的启动方式为单机启动,如果是windods,修改startup.cmd,如果是linux修改startup.sh启动脚本。
export SERVER="nacos-server"
export MODE="standalone"
export FUNCTION_MODE="all"
export MEMBER_LIST=""
export EMBEDDED_STORAGE=""
while getopts ":m:f:s:c:p:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
c)
MEMBER_LIST=$OPTARG;;
p)
EMBEDDED_STORAGE=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
然后创建一个名为nacos的mysql数据库,将mysql脚本执行进去。
最后启动nacos服务,如果是windows,双击startup.cmd,如果是linux,执行startup.sh脚本。
启动成功界面如下所示:
账号密码是nacos/nacos
二、环境搭建
1、工程结构
其中,api-gateway是微服务调用的网关服务,dubbo-api是dubbo暴露的接口,dubbo-provider是服务提供者,dubbo-consumer是消费者。
2、依赖引入
api-gateway引入的依赖主要有:
<dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
dubbo-provider依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
dubbo-consumer引入的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3、注册中心配置
三个服务的注册配置是一样的,只是服务名和端口不一样,在这里列服务提供者的进行说明,但是在配置的时候三个服务都要配置。
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
4、dubbo配置
# dubbo 协议
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
# dubbo 协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.port=20881
# Dubbo 消费端订阅服务端的应用名,多个服务提供者用逗号分隔
# 这里订阅"自己",会被忽略掉,请根据实际情况添加
dubbo.cloud.subscribed-services=dubbo-provider
5、网关配置
server:
port: 3000
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
enabled: true
gateway:
discovery:
locator:
enabled: true
gateway:
routes:
- id: dubbo-consumer
uri: lb://dubbo-consumer
order: 1
predicates:
- Path=/consumer/**
filters:
- StripPrefix=1
三、创建服务
1、接口编写
在dubbo-api工程中创建一个接口,IHelloService
package com.example.dubbbo.dubbo;
/**
* @author dongbaozhu
*/
public interface IHelloService {
String sayHello(String name);
}
然后执行maven的clean命令,接着执行install安装相关依赖。
2、服务实现
package com.example.provider.dubbo;
import com.alibaba.dubbo.config.annotation.Service;
import com.example.dubbbo.dubbo.IHelloService;
/**
* @author dongbaozhu
*/
@Service
public class IHelloServiceImpl implements IHelloService {
@Override
public String sayHello(String name) {
return name;
}
}
3、编写web接口
在dubbo- consumer工程中编写接口测试代码,创建一个controller,名为HelloController。代码如下:
package com.example.consumer.controller;
import com.example.dubbbo.dubbo.IHelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author dongbaozhu
*/
@RestController
public class HelloController {
@DubboReference
private IHelloService iHelloService;
@GetMapping("/hello")
public String hello(){
return iHelloService.sayHello("hello");
}
}
在dubbo-provider的启动类中加入@DubboComponentScan注解。主要是为了扫描dubbo服务提供者的包
@DubboComponentScan
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
四、测试接口
分别启动网关,服务提供者和服务消费者。启动成功后在nacos的服务列表中就会看到所注册的服务。
在浏览器中输入访问url:
http://127.0.0.1:3000/consumer/hello
然后会打印出服务提供者返回的信息。
调用关系:
请求从浏览器进来,然后通过网关路由服务消费者,接着消费者通过dubbo的形式调用服务提供者,服务提供者返回数据给消费者。消费者再将消息返回给前端。
最后附上源码地址:https://gitee.com/JasonDongbaozhu/dubbo-demo.git
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggfijg
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13