1、dubbox需要在本地install,地址https://github.com/dangdangdotcom/dubbox.git,使用版本为2.8.4
2、新建spring boot项目,版本为1.5.6.RELEASE
- 创建maven模块
spring-boot-dubbox-api:dubbo服务接口
spring-boot-dubbox-provider:dubbo服务提供者
- 引入dubbo配置
@Configuration
@ImportResource("classpath:dubbo/dubbo.xml")
public class PropertiesLoad {
}
dubbo.xml具体配置如下
<!-- dubbo扫描Service--> <dubbo:annotation package="org.spring.boot.dubbox.provider.service"/> <dubbo:application name="provider" owner="platin"/> <dubbo:registry protocol="zookeeper" address="zookeeper://localhost:2181" /> <!--使用kyro序列化--> <dubbo:protocol name="dubbo" serialization="kryo" port="20990" /> <!-- dobbox基于resteasy的REST接口发布,sever采用Tomcat --> <dubbo:protocol name="rest" port="8090" server="tomcat" />
- 发布服务
@Service//alibaba服务注解
@Path("user")//rest服务
//rest服务数据格式,类与方法同时指定,方法中的优先级高
@Produces({ "application/json; charset=UTF-8", "text/xml; charset=UTF-8" })
public class UserServiceImpl implements UserService {
private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@POST
@Path("save")
@Produces({ ContentType.APPLICATION_JSON_UTF_8 }) //dubbox封装的类型
public WrappResult save() {
//解决primitive类型不被JAXB序列化的问题
return new WrappResult((int) (Math.random() * 10));
}
@GET
@Path("{id : \\d+}")
public User getUserById(@PathParam("id") Long id, @Context HttpServletRequest request) {
logger.info("Client address is:{}", request.getRemoteAddr());
User user = new User(1L, "SpringBoog-Dubbox",20);
return user;
}
@GET
@Path("/xml/{id : \\d+}")
@Produces(ContentType.TEXT_XML_UTF_8) //使用xml格式
public User getUserByIdXml(@PathParam("id") Long id) {
logger.info("Client address is:{}", RpcContext.getContext().getRemoteAddressString());
User user = new User(10L, "Xml-Entity",20);
return user;
}
}
3、Spring Boot启动类
@SpringBootApplication
public class ProviderApp {
public static void main(String[] args) throws IOException {
SpringApplication.run(ProviderApp.class, args);
}
// 使用jetty加载
// @Bean
// public EmbeddedServletContainerFactory servletContainer() {
// JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
// return factory;
// }
}
- rest服务发布结果
main INFO zookeeper.ZookeeperRegistry: [DUBBO] Register: rest://10.*.*.*:8090/org.spring.boot.dubbox.api.UserService?anyhost=true……
main INFO zookeeper.ZookeeperRegistry: [DUBBO] Subscribe: provider://10*.*.*:8090/org.spring.boot.dubbox.api.UserService?anyhost=true&……
main INFO zookeeper.ZookeeperRegistry: [DUBBO] Notify urls for subscribe url provider://10.*.*.*:8090/org.spring.boot.dubbox.api.UserService?anyhost=true&……
- rest服务验证
http://localhost:8090/user/1.xml
<user> <age>20</age> <id>1</id> <name>SpringBoog-Dubbox</name> </user>
http://localhost:8090/user/1.json
{ "id": 1, "name": "SpringBoog-Dubbox", "age": 20 }