使用dubbo注册服务提供者失败参考方式
前提条件:需要打开
zookeeper
的服务端
报错内容截图如下
翻译意思为:
HTTP 状态 500 - 请求处理失败;
嵌套异常是 com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for service com.zcl.service.UserService on consumer 192.168.26.1 use dubbo version 2.6.0, 可能是 provider disabled 或者没有
挂号的 ?由此可以发现,消费者是可以直接请求dubbo的而报错的原因就是服务提供者提供这个服务给消费者导致的500错误
查看spring的配置注册dubbo的代码注意观察批量扫描的位置(这是一个重点位置,很多人可能会忽略)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 指定应用名称 -->
<dubbo:application name="DFJD_Service_Provider"/>
<!--指定暴露服务的端口,如果不指定默认为20880-->
<dubbo:protocol name="dubbo" port="20887"/>
<!--指定服务注册中心地址-->
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!--批量扫描,发布服务(是扫描当前模块的业务实现类包)-->
<dubbo:annotation package="com.zcl.serviceImpl"/>
</beans>
匹配扫描的包应该是我们当前项目的服务提供者包文件,而不是其他模块的包,我遇到的就是修改这个就完成了,下面看一下服务提供者的代码
因为是分模块部署开发的,我将所有的接口都归为了一个接口模块中,通过业务模块来继承接口模块从而实现业务功能
对于dubbo的服务注册于事务@Transactional
是会产生冲突的,所有使用的dubbo的@Service
必须指定它所继承的一个类的字节码文件。而我们在上面配置的批量扫描位置就应该扫描的是这个地方,扫描到了之后就会通过zookeeprt注册到注册中心成为提供者(而如果扫描的不是当前包就会注册失败)
package com.zcl.serviceImpl;
import com.alibaba.dubbo.config.annotation.Service;
import com.zcl.dao.UserDao;
import com.zcl.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
/**
* 项目名称:DFJD
* 描述:用户接口实现类
*
* @author zhong
* @date 2022-07-11 20:13
*/
@Service(interfaceClass = UserService.class)
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public String testUser() {
System.out.println("用户接口实现类");
userDao.add("123456");
return "success";
}
}
对于远程服务的调用如下:dubbo的远程调用使用的是dubbo的@Reference注解(一般的同一个模块开发的我们都是使用@Autowired根据类型注入),消费者就是通过了@Reference注解到注册中心消费提供者的服务的
package com.zcl.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zcl.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 项目名称:DFJD
* 描述:用户控制器
*
* @author zhong
* @date 2022-07-11 20:10
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Reference
private UserService userService;
@RequestMapping("/test")
public String test() {
System.out.println("资源被访问");
return userService.testUser();
}
}
如何使用zookeeper客户端来查看注册的dubbo服务
使用的是win版本操作
一:在按照路径的bin
目录下打开客户端程序
二:进入程序输出指令如下
# 查看所有的服务
ls /
# 进入服务
ls /xxx
# 删除服务
deleteall /xxx
具体操作如下