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

相关推荐
xianjixiance_15 分钟前
HarmonyOS应用开发实战:萌宠日记 - 整体架构设计与技术选型解析
后端
掘金者阿豪15 分钟前
数据库优化器到底在想什么:一个SQL今天能跑明天崩的背后
后端
b1305381004920 分钟前
HarmonyOS应用开发实战:萌宠日记 - 回调函数模式
后端
Conan在掘金27 分钟前
鸿蒙报错速查:Cannot find name 'image',忘 import 编译就炸,根因 + 真解法
后端
雪隐37 分钟前
个人电脑玩AI-13让5060 Ti给你打工——我用 0.9B 小模型终结了"谁来记会议纪要"这个世纪难题
前端·人工智能·后端
无名之辈J41 分钟前
Ai开发
后端
Conan在掘金42 分钟前
�鸿蒙报错速查:arkts-strict-typing 函数返回值类型必须显式,忘标就炸,根因 + 真解法
后端
半个落月1 小时前
用 LangChain JS 做可控写作实验:理解温度参数、提示词与异步调用
javascript·人工智能·后端
爱勇宝1 小时前
《道德经》第 7 章:真正厉害的领导者,不抢主角
前端·后端·程序员
用户208046804561 小时前
Python3 条件控制新手实战指南
后端