前言
近期自己新開了一套SpringCloud Alibaba微服務項目,接口使用了對外HTTP,內(nèi)部RPC的設計,具體點說就是外部用戶或客戶端通過Nginx訪問到Gateway網(wǎng)關再分發(fā)到各個服務,內(nèi)部各個服務之間統(tǒng)一使用Dubbo RPC進行通信。下面是Springboot3.x集成Dubbo的分享:
1. 需要的關鍵依賴
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
<version>3.1.6</version>
</dependency>
<!--微服務組件 start-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2. 啟動程序入口注解
2.1. 生產(chǎn)者
@EnableDubbo
@EnableAsync
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
2.2 消費者
@EnableDubbo
@EnableAsync
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
2.3 dubbo配置
dubbo:
application:
id: ${spring.application.name}
name: ${dubbo.application.id}
registry:
address: nacos://127.0.0.1:8848?username=nacos&password=houcloud
group: dubbo
metadata-report:
address: nacos://127.0.0.1:8848?username=nacos&password=houcloud
protocol:
name: dubbo
port: -1
config-center:
timeout: 8000
provider:
threads: 20000
threadpool: fixed
loadbalance: roundrobin
timeout: 5000
executes:
filter: customExceptionFilter,-exception
scan:
base-packages: com.houcloud.application.admin.rpc
consumer:
check: false
3. Dubbo 公共 interface
public interface RpcUserService {
// 刪除用戶令牌
Boolean removeUserToken(Long userId)
}
4. 提供者UserApplication實現(xiàn)Dubbo 公共 interface
@DubboService(interfaceClass = RpcUserService.class)
public class RpcUserServiceImpl implements RpcUserService {
@Resource
private UserRedisTokenStore userRedisTokenStore;
@Override
public Boolean removeUserToken(Long userId){
return userRedisTokenStore.removeByUserId(userId);
}
}
5. 消費者AdminApplication調(diào)用Dubbo 公共 interface
@DubboReference
private RpcUserService rpcUserService;
public Boolean lockUser(Long userId) {
boolean update = userService.lambdaUpdate().eq(User::getId, userId).set(User::getLocked, true).update();
if(!update){
return false
}
return rpcUserService.removeUserToken(userId);
}
啟動報錯
在集成Dubbo的過程中出現(xiàn)了java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessorAdapter
異常
第一反應是以為缺少jar包,補了好幾個相關dubbo和nacos的包也無濟于事
91 [main] ERROR [org.springframework.boot.SpringApplication] SpringApplication.java:820 - Application run failed
java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/InstantiationAwareBeanPostProcessorAdapter
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
解決問題
由于是新開項目,用的都是最新的版本,統(tǒng)一使用了2022版本的Springcloud,原因是因為最新Dubbo的3.1.x沒有支持到Springboot3.x,所有需要用到 3.2.0-beta版本文章來源:http://www.zghlxwxcb.cn/news/detail-608019.html
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
<version>3.2.0-beta.5</version>
</dependency>
創(chuàng)作聲明:本文由個人@簡明說原創(chuàng),不允許轉(zhuǎn)載,更多微服務分享可關注bilibili @簡明說文章來源地址http://www.zghlxwxcb.cn/news/detail-608019.html
到了這里,關于Springboot3.X整合Dubbo3.XSpringCloudAlibaba微服務 2022.0 + Springboot3.X 集成 Dubbo實現(xiàn)對外調(diào)用http內(nèi)部調(diào)用RPC的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!