• 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("userService")
    public class UserServiceImpl implements UserService {
        @Override
        public ResponseResult<Object> query(Integer id) {
            return null;
        }
    
        //...
    }
    
    

    配置服务

    在spring配置文件中添加此服务:
    dubbo:service/声明需要暴露的服务提供者接口,如果是消费者就用dubbo:reference/

    <!-- 用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="userService"/>
    
    <!-- 和本地bean一样实现服务,class指定实现类的路径 -->
    <bean id="userService" class="xxx.xxx.UserServiceImpl" />
    
    

    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

  • 相关阅读:
    Servlet设置Cookie无效
    IOS即时通讯XMPP搭建openfire服务器
    IOS之富文本编辑
    unittest单元测试框架总结
    杀死future处理的阻塞线程
    APP的UI设计原则
    如何降低一个程序的耦合性
    Hyperopt中文文档导读
    Hyperopt中文文档导读
    AdaBoost算法特性
  • 原文地址:https://www.cnblogs.com/expiator/p/15848294.html
Copyright © 2020-2023  润新知