springboot整合dubbo3 及其中遇到的坑

前言

之前以及了解过了springboot cloud 微服务的一系列框架,其中dubbo在3之前一直作为一款优秀的rpc框架存在(对标spring cloud中的feign组件),为此duboo3出以后,dubbo也逐渐变成了一个微服务整合平台,目前我进行学习的是个时候遇到很多坑dubbo x springboot 官方开发文档

环境安装

弱依赖环境 统一建议使用docker 安装
运行zookper 作为注册中心 naocs当然也可以

docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

管理可视化界面

docker run --name dubbo-admin -e admin.registry.address=zookeeper://some-zookeeper:2181 -p 8080:8080 --link some-zookeeper --restart always -d apache/dubbo-admin

此时访问虚拟机地址 :8080 默认密码账户 root
在这里插入图片描述

和springcloud不同的是,dubbo中一个接口实现就为一个服务

搭建工程

下面的操作都是根据官网来的
目录结构
在这里插入图片描述

父工程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"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>Dubbo-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>dubbo-comsumer</module><module>dubbo-provider</module><module>dubbo-commom</module></modules><properties><dubbo.version>3.2.0-beta.4</dubbo.version><spring-boot.version>2.7.12</spring-boot.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.1.10</version></dependency><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>${dubbo.version}</version><type>pom</type></dependency></dependencies></dependencyManagement><build><pluginManagement><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version></plugin></plugins></pluginManagement></build>
</project>

子模块-privider 服务提供者

    <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><groupId>com.itheima</groupId><artifactId>dubbo-provider</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><parent><groupId>org.example</groupId><artifactId>Dubbo-demo</artifactId><version>1.0-SNAPSHOT</version></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>dubbo-commom</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><type>pom</type><exclusions><exclusion><artifactId>slf4j-reload4j</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies></project>

其中common 是自己抽离出来的通用接口模块,这里一切都和springcloud中使用feign类似远程调用工具feign
一样

commom 通用接口模块

在这里插入图片描述
其中的定义的一个接口

public interface DoubleUserService {public String getUser();
}

服务端实现接口

使用dubboservice 暴露接口

@DubboService(version = "2.0")
public class DoubleUserServiceImpl2 implements DoubleUserService {@Overridepublic String getUser() {return "数据库查询出是:李四";}
}

该注解参数
在这里插入图片描述
第二个实现接口的类 指定版本为1

@DubboService(version = "1.0")
public class DoubleUserServiceImpl implements DoubleUserService {@Overridepublic String getUser() {return "数据库查询出来是username: 王二";}
}

yaml 配置文件

dubbo:application:name: dubbo-springboot-demo-providerprotocol:name: dubboport: -1registry:address: zookeeper://${zookeeper.address:192.168.249.133}:2181#我的工程跟官网这里不加会报错 官网不会 很奇怪parameters:blockUntilConnectedWait: 50
server:port: 8762

启动类

@SpringBootApplication
@EnableDubbo(scanBasePackages = "org.example.Service")
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class,args);}
}

此时成功注册并且web界面可以观察
在这里插入图片描述

服务消费端(目前有问题没有解决)

这里我是跟着官网来的,但是问题出现的很严重
pom文件

    <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><groupId>com.itheima</groupId><artifactId>dubbo-comsumer</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging>
<parent><groupId>org.example</groupId><artifactId>Dubbo-demo</artifactId><version>1.0-SNAPSHOT</version>
</parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>dubbo-commom</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><type>pom</type><exclusions><exclusion><artifactId>slf4j-reload4j</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><dependency><groupId>com.itheima</groupId><artifactId>dubbo-provider</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies></project>

作为服务消费方,使用到dubbo服务的控制层

@RestController
@RequestMapping("user")
public class Usercontroller {@DubboReference(version="1.0") 	//指定调用版本private DoubleUserService userService;@GetMapping("info1")public String get1(){String s = userService.getUser();return "info:"+s;}
}

启动类 这个enable我百度文档说加不加都不所谓

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

我指定了使用的服务接口,并且指定了版本
配置文件

dubbo:application:name: dubbo-springboot-demo-comsumerprotocol:name: dubboport: -1registry:address: zookeeper://${zookeeper.address:192.168.249.133}:2181parameters:blockUntilConnectedWait: 50server:port: 8444  # 选择一个可用的端口

问题1:出现了报错 端口已经绑定 并且无论我切换任意端口都无法接口该问题


java.net.BindException: Address already in use: bindat java.base/sun.nio.ch.Net.bind0(Native Method) ~[na:na]at java.base/sun.nio.ch.Net.bind(Net.java:555) ~[na:na]at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337) ~[na:na]at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294) ~[na:na]at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:141) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1334) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:600) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:579) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:260) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:356) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) ~[netty-transport-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.92.Final.jar:4.1.92.Final]at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]

但是dubbo-adnmin 界面却可以发现该服务
在这里插入图片描述
问题2:于是既然服务已经发现,那么我尝试访问这个消费者的控制层,因为这里会对服务提供者进行远程调用,可是报错

No provider available from registry 192.168.249.133:2181 for service org.example.api.DoubleUserService:1.0.0 on consumer 192.168.10.98 use dubbo version 3.2.0-beta.4, please check status of providers(disabled, not registered or in blacklist).

我已经各自百度2天了,官方文档也没有类似问题 ,本文章长期更新,等解决了在补完


问题解决办法

问题二解决了 我把注册中心从zookper切换为了nacosdubbo配置中心文档

注册中心切换为nacos

在这里插入图片描述
因为nacos3适配的nacos在2.0以上,nacos在2.2过后也发生了大改变(需要挂载更多端口),为此这里安装的是nacos 2.2.0

docker run --name nacos-server \
-p 8848:8848 \
-p 7848:7848 \
-p 9848:9848 \
-p 9849:9849 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /mydata/nacos/logs:/home/nacos/logs \
-d nacos/nacos-server:v2.2.0

消费者和服务提供者pom文件

<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.example</groupId><artifactId>dubbo-commom</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><type>pom</type><exclusions><exclusion><artifactId>slf4j-reload4j</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!-- spring boot starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
<!--            <dependency>-->
<!--                <groupId>org.apache.dubbo</groupId>-->
<!--                <artifactId>dubbo</artifactId>-->
<!--                <version>3.0.9</version>-->
<!--            </dependency>--><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.2.0</version></dependency></dependencies>

服务提供模块配置文件

dubbo:application:name: dubbo-springboot-demo-providerprotocol:name: dubboport: -1registry:address: nacos://192.168.249.133:8848?username=nacos&password=nacos
#    parameters:
#      blockUntilConnectedWait: 50
server:port: 8762

打开服务器/虚拟机ip:8848/nacos 密码账户 默认都是nacos
在这里插入图片描述
发现注册成功 dubbo一个接口就是一个服务
然后对应的修改消费端口的配置文件

dubbo:config-center:timeout: 10000application:name: dubbo-springboot-demo-comsumerprotocol:name: dubboregistry:address: nacos://192.168.249.133:8848?username=nacos&password=nacostimeout: 10000
#    parameters:
#      blockUntilConnectedWait: 50server:port: 7777  # 选择一个可用的端口

启动后发现端口依旧报错 修改任意端口都是该问题

Address already in use: bind

但是当我访问消费端的控制层
在这里插入图片描述
!!!既然出数据了,并且我在生产者provider添加了日志

在这里插入图片描述
在这里插入图片描述
确实成功证明dubbo的rpc功能可以实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/441458.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElementUI组件:Button 按钮

button按钮 点击下载learnelementuispringboot项目源码 效果图 el-button.vue页面效果图 项目里el-button.vue代码 <script> export default {name: "el_button",// 注意这里的名称不能和 router inex.js里的name一样methods: {sendMsg() {// alert(1)xthi…

知识点积累系列(一)golang语言篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第一篇&#xff0c;记录golang语言相关的知识点 1.结构体的mapstructure是什么 mapstructure:"default" mapstructure是一个Go语言的库&#xff0c;用于将一个map中的值映射到…

[嵌入式系统-6]:龙芯1B 开发学习套件 -3-软件层次架构

目录 一、龙芯软件架构 1.1 通用软件架构 1.2 龙芯软件架构 1.3 龙芯各种应用程序 1.4 龙芯SOC芯片硬件&#xff1a;龙芯1B 1.5 PMON软件 1.6 龙芯IDE管辖的软件 &#xff08;1&#xff09;CPU Core驱动程序 &#xff08;2&#xff09;SOC芯片外设驱动程序 &#xff…

螺旋遍历二维数组【leetcode】

给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完所有元素。 示例 1&#xff1a; …

[docker] Docker容器服务更新与发现之consul

一、consul的相关知识 1.1 什么是注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&#…

走迷宫-bfs

package Test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 110,hh 0,tt -1,n,m;static int[][] g new int[N][N]; //用来存储迷宫static int[][] d new int[N][N]; //用来存储d[i…

【送书福利-第三十期】《Java面试八股文:高频面试题与求职攻略一本通》

内容简介 本书将碎片化的Java面试八股文知识点系统化、结构化&#xff0c;精选了近200道经典高频的八股文面试题&#xff0c;整理了近20个经典高频的实战场景解决方案&#xff0c;准备了10多个面试简历实操技巧。每道面试题都标注了难度指数、考查频率、开发年限和匹配岗位等&…

c++之说_9_6|自定义类型 struct operator 重载运算符关键字

c中 struct 和 class 特性几乎一模一样 所以很多都是共有的特性 篇幅就很多了 c中 我觉得最牛皮的概念之一 就是 重载运算符 operator 关键字 这个东西 能将 我们的 运算符 &#xff08;-*/&#xff09; new delete 类型转换 写在类里面当成员函数 并制定 该类型变…

手机屏幕生产厂污废水处理需要哪些工艺设备

随着手机行业的快速发展&#xff0c;手机屏幕生产厂的规模也越来越大&#xff0c;但同时也带来了大量的污废水排放问题。为了保护环境和人类的健康&#xff0c;手机屏幕生产厂需要采取适当的工艺设备来处理污废水。本文将介绍手机屏幕生产厂污废水处理所需的工艺设备。 首先&am…

数据据库八之 视图、触发器、事务

【零】准备数据 【1】创建表 &#xff08;1&#xff09;部门表 d_id是部门的编号d_name是部门的名字 # 确保表不存在 drop table if exists department; # 创建表 create table department( d_id int auto_increment primary key, d_name varchar(6) )auto_increment 501 …

CSS之webkit内核中的属性text-stroke

让我为大家介绍一下text-stroke 大家是否想过要弄一个描边过的文字&#xff0c;接下来&#xff0c;text-stroke就可以为你解决 text-stroke是一个复合属性&#xff0c;里面有两个参数&#xff1a;描边的尺寸 描边的颜色 <!DOCTYPE html> <html lang"en">…

【服务端性能测试】性能测试策略如何做

一、需求收集 先需要确认本次测试目的是什么&#xff0c;然后再看我们需要用什么参数来判断这个目的是否能够达成。 1.1 业务性能指标参考&#xff1a; TPS、QPS、RT、请求成功率&#xff08;一般请求成功率>99.99%&#xff09; 1.2 硬件性能指标参考&#xff1a; 即服…