使用场景
可以基于标准的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