Dubbo使用Rest开发服务

使用场景

可以基于标准的Java REST API------JAX-RS 2.0(Java API for RESTful Web Services的简写),

也就是REST的api和注解,为dubbo提供调用支持。

Service示例

在Dubbo使用Rest时,Service接口,作用类似于Spring的Controller

复制代码
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("user")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_HTML, MediaType.TEXT_PLAIN, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_JSON + "; " + MediaType.CHARSET_PARAMETER + "=UTF-8"
        , MediaType.TEXT_XML + "; " + MediaType.CHARSET_PARAMETER + "=UTF-8"})
public interface UserService {
    /**
     * 该接口通过 ip:端口号/user/query 进行调用, 比如 localhost:8080/user/query
     * 
     */
    @GET
    @Path("/query")
    ResponseResult<List<User>> queryList(@QueryParam("id") Integer id);
    
    /**
     * 该接口通过 ip:端口号/user/list进行调用, 比如 localhost:8080/user/list?id=123
     * 
     */
    @POST
    @Path("/list")
    ResponseResult<User> queryList(UserQuery query);

    /**
     * 该接口通过 ip:端口号/user/detail 进行调用, 比如 localhost:8080/user/detail
     * 
     */
    @POST
    @Path("/detail")
    ResponseResult<User> queryDetail(@Context HttpServletRequest request,
                                    @Context HttpServletResponse response);
}

常用注解

@Path : 表示url的请求路径,在Service接口上方的@Path是父级路径,在方法上面的@Path是后续的路径。

@Consumes: 可以指定请求的MediaType格式, 比如 json,text等。

@Produces:可以指定响应的MediaType格式, MediaType.CHARSET_PARAMETER 表示字符编码。

@GET: GET请求。 @POST: POST请求。

@QueryParam: url路径问号后的参数。比如 localhost:8080/user/query?id=123

@PathParam: url路径中占位符的参数。比如 getUser(@PathParam("id") Long id); 对应 localhost:8080/user/123

@Context: 用于获取请求和上下文, 比如 @Context HttpServletRequest request

Service实现类:

跟普通的ServiceImpl类一样。

复制代码
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public ResponseResult<Object> query(Integer id) {
        return null;
    }

    //...
}

配置服务

在spring配置文件中配置此服务:

复制代码
<!-- 用rest协议在8080端口暴露服务 -->
<dubbo:protocol name="rest" port="8080"/>

<!-- <dubbo:service/>声明需要暴露的服务提供者接口,如果是消费者就用<dubbo:reference/>,interface指定接口路径,protocol指定协议,ref为接口实现类的bean的id -->
<dubbo:service interface="xxx.xxx.UserService" protocol="rest" ref="userServiceImpl"/>

如果是在服务消费者中调用,需要使用 dubbo:reference,配置服务提供者定义的接口,并指定id 。

复制代码
<dubbo:reference interface="xxx.xxx.UserService" id="userService"/>

关于dubbo:service 和 dubbo:reference的配置详情,参考官方文档:

https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-service/

https://dubbo.apache.org/en/docs/v2.7/user/references/xml/dubbo-reference/

SpringBoot2整合Dubbo

https://www.cnblogs.com/expiator/p/15837603.html

参考资料:

官方文档: https://dubbo.apache.org/zh/docs/references/protocols/rest/

https://blog.csdn.net/varyall/article/details/104078512

相关推荐
Query*6 分钟前
Java 设计模式——代理模式:从静态代理到 Spring AOP 最优实现
java·设计模式·代理模式
梵得儿SHI7 分钟前
Java 反射机制深度解析:从对象创建到私有成员操作
java·开发语言·class对象·java反射机制·操作类成员·三大典型·反射的核心api
JAVA学习通11 分钟前
Spring AI 核心概念
java·人工智能·spring·springai
望获linux13 分钟前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
绝无仅有21 分钟前
面试真实经历某商银行大厂数据库MYSQL问题和答案总结(二)
后端·面试·github
绝无仅有23 分钟前
通过编写修复脚本修复 Docker 启动失败(二)
后端·面试·github
..Cherry..25 分钟前
【java】jvm
java·开发语言·jvm
老K的Java兵器库35 分钟前
并发集合踩坑现场:ConcurrentHashMap size() 阻塞、HashSet 并发 add 丢数据、Queue 伪共享
java·后端·spring
冷冷的菜哥1 小时前
go邮件发送——附件与图片显示
开发语言·后端·golang·邮件发送·smtp发送邮件
向葭奔赴♡1 小时前
Spring Boot 分模块:从数据库到前端接口
数据库·spring boot·后端