dubbo rest 配置

dubbo 2.6.0 之后 支持rest访问格式

支持标准的 JAX-RS 请参阅相关文档

pom.xml 参照官方的jar版本

https://github.com/apache/incubator-dubbo/blob/master/dependencies-bom/pom.xml
    
        3.0.19.Final
        3.1.0
        6.1.26
        1.1.0.Final
        5.4.1.Final
    

    
        
            org.projectlombok
            lombok
            1.16.18
        

        
            com.alibaba
            dubbo
            2.6.1
        
        
            javax.ws.rs
            javax.ws.rs-api
            2.0
        
        
            org.apache.curator
            curator-framework
            2.12.0
        
        
            org.apache.zookeeper
            zookeeper
            3.4.11
        
        
            org.apache.httpcomponents
            httpclient
            4.5.3
        
        
            org.jboss.resteasy
            resteasy-jaxrs
            ${resteasy_version}
        
        
            org.jboss.resteasy
            resteasy-client
            ${resteasy_version}
        
        
            org.jboss.resteasy
            resteasy-netty4
            ${resteasy_version}
            
                
                    io.netty
                    netty-all
                
            
        
        
            org.jboss.resteasy
            resteasy-jdk-http
            ${resteasy_version}
        
        
            org.jboss.resteasy
            resteasy-jackson-provider
            ${resteasy_version}
        
        
            org.jboss.resteasy
            resteasy-jaxb-provider
            ${resteasy_version}
        
        
            javax.servlet
            javax.servlet-api
            ${servlet_version}
        
        
            org.mortbay.jetty
            jetty
            ${jetty_version}
        
        
            javax.validation
            validation-api
            ${validation_version}
        
        
            org.hibernate
            hibernate-validator
            ${hibernate_validator_version}
        
    

User.java

package com.yiwugou.demo.dubbo.bean;

import java.io.Serializable;

import lombok.Data;

@Data
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private String username;
    private String password;
}

dubbo-demo-provider.xml

    
    

    
    
    
    
    
    

    

UserService.java (JAX-RS 注解推荐加载接口处)

package com.yiwugou.demo.dubbo.service;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import com.yiwugou.demo.dubbo.bean.User;

@Path("users")
@Produces({ MediaType.APPLICATION_JSON })
public interface UserService {
    @GET
    @Path("get/{id}")
    public User get(@PathParam("id") Long id);

    @POST
    @Path("byjson")
    @Consumes({ MediaType.APPLICATION_JSON })
    public User byJson(User user);

    @POST
    @Path("byform")
    @Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
    public User byForm(@FormParam("id") Long id, @FormParam("username") String username);

    @GET
    @Path("byquery")
    public User byQuery(@QueryParam("username") String username, @QueryParam("password") String password);
}

UserServiceImpl.java

package com.yiwugou.demo.dubbo.service;

import org.springframework.stereotype.Service;

import com.yiwugou.demo.dubbo.bean.User;

@Service("userService")
public class UserServiceImpl implements UserService {

    @Override
    public User get(Long id) {
        User user = new User();
        user.setUsername(id + "-get-username");
        user.setPassword(id + "-get-password");
        System.err.print(user);
        return user;
    }

    @Override
    public User byJson(User user) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public User byForm(Long id, String username) {
        User user = new User();
        user.setUsername(id + "-byForm-" + username);
        user.setPassword(id + "-byForm-password");
        System.err.print(user);
        return user;
    }

    @Override
    public User byQuery(String username, String password) {
        User user = new User();
        user.setUsername("byQuery-" + username);
        user.setPassword("byQuery-" + password);
        System.err.print(user);
        return user;
    }
}

rest 访问的路径和方法为

get 
http://127.0.0.1:8080/users/get/1234

post with body
http://127.0.0.1:8080/users/byjson
{
    username:"abcd",
    password:"1234"
}

post with form
http://127.0.0.1:8080/users/byform
username=abcd
password=1234
(html form)

get 
http://127.0.0.1:8080/users/byquery?username=abcd&password=1234

非dubbo 如何调用 dubbo-rest 以及如何负载均衡?

官方没有提供相应的rest-client,

  1. 自己写client代码
访问zk node 节点 可以得到真实服务地址与端口信息列表 然后负载均衡
(进入zookeeper 运行命令 ls /dubbo/com.yiwugou.demo.dubbo.service.UserService/providers

rest://10.6.62.155:8080/com.yiwugou.demo.dubbo.service.UserService?anyhost=true&application=dubbo-demo-provider&dubbo=2.6.1&generic=false&interface=com.yiwugou.demo.dubbo.service.UserService&methods=get,byJson,byQuery,byForm&pid=1292&side=provider×tamp=1523410526582,
rest://10.6.62.155:8081/com.yiwugou.demo.dubbo.service.UserService?anyhost=true&application=dubbo-demo-provider&dubbo=2.6.1&generic=false&interface=com.yiwugou.demo.dubbo.service.UserService&methods=get,byJson,byQuery,byForm&pid=5296&side=provider×tamp=1523412396290, 
) 

2 建议使用第三方rest的负载均衡
如 nginx, yiwugou homer

dubbo 调用 dubbo-rest

照常即可 我们不需要关注里面的具体协议是 dubbo 还是 rest

dubbo 调用 非dubbo-rest

~1. 可以用java代码或者采用第三方rest-client
~2.需要根据提供的 rest服务以及返回参数 自己组装类和接口

例如,我们要调用如下的外部服务
http://api.foo.com/services/users/1001
http://api.foo.com/services/users/1002

获取不同ID的用户资料,返回格式是JSON

{
    "id": 1001,
    "name": "Larry"
}
我们可根据这些信息,编写服务接口和参数类即可:

@Path("users")
public interface UserService {
    @GET
    @Path("{id : \\d+}")
    @Produces({MediaType.APPLICATION_JSON})
    User getUser(@PathParam("id") Long id);
}
public class User implements Serializable {
    private Long id;
    private String name;
}
对于spring中的配置,因为这里的REST服务不是dubbo提供的,所以无法使用dubbo的注册中心,直接配置外部REST服务的url地址即可(如多个地址用逗号分隔):


参考 dubbox 帮助文档

你可能感兴趣的:(dubbo rest 配置)