dubbo整合springboot图解版(九)
点击Next,直接点完成!
创建完成!
将之前dubbo-provider的实现复制到新的boot-dubbo-provider相应目录下:
在pom.xml中添加依赖的dubbo-interface这个接口包
错误就消失了!
然后我们来配置服务提供者:
首先导入dubbo-starter依赖:
进入https://github.com/apache/incubator-dubbo,找到Dubbo-Spring-Boot,进入
则可以找到dubbo和spring boot整合的依赖包:
粘贴进服务提供者的pom中:
<!-- dubbo和springboot整合的依赖包 --><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.0</version></dependency>
导入mybatis和springboot的依赖:
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency>
然后配置dubbo框架配置:
#dubbo服务提供者的应用名称
dubbo.application.name=demotest-provider
#dubbo注册中心的地址
dubbo.registry.address=127.0.0.1:2181
#dubbo注册中心使用协议
dubbo.registry.protocol=zookeeper#dubbo使用协议
dubbo.protocol.name=dubbo
#dubbo协议使用的端口
dubbo.protocol.port=20880#dubbo监控中心协议
dubbo.monitor.protocol=registry
然后配置数据库和mybatis:
#数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/dubbo
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000 mybatis.mapper-locations=classpath*:mapper/*Mapper.xml
mybatis.type-aliases-package=com.alibaba.dubbo.mapper
配置自定义端口:
server.port=8888
配置完dubbo之后,在启动入口处开启基于注解的dubbo功能:
粘贴下代码:
package com.alibaba.dubbo.service.impl;import java.util.List;import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.common.CrudServiceImpl;
import com.alibaba.dubbo.domain.Role;
import com.alibaba.dubbo.mapper.RoleMapper;
import com.alibaba.dubbo.service.RoleService;/*** service注解暴露服务,指定服务超时时间* @author jeff* 2018年8月28日*/
@Service(timeout=1000)
public class RoleServiceImpl extends CrudServiceImpl<Role> implements RoleService<Role>{private final static Logger logger = LogManager.getLogger(RoleServiceImpl.class);@Autowiredprivate RoleMapper<Role> roleMapper;@Overridepublic List<Role> getALlRoles() {logger.debug("getALlRoles in...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}return roleMapper.getAllRoles();}}
package com.alibaba.dubbo.service.impl;import java.util.List;import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.alibaba.dubbo.common.CrudServiceImpl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.dubbo.domain.User;
import com.alibaba.dubbo.mapper.UserMapper;
import com.alibaba.dubbo.service.UserService;/*** * @author jeff* 2018年8月28日*/
@Service(timeout=1000)
public class UserServiceImpl extends CrudServiceImpl<User> implements UserService<User>{private final static Logger logger = LogManager.getLogger(UserServiceImpl.class);@Autowiredprivate UserMapper<User> userMapper;/*** 使用dubbo注解的timeout参数测试接口请求超时情况,经测试会重试另外两次,一共三次。* 消费端抛出异常如下:* com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method getALlUsers in the service com.alibaba.dubbo.service.UserService.* Tried 3 times of the providers [172.16.0.89:20880] (1/1) from the registry localhost:2181 on the consumer 172.16.0.89 using the dubbo version 2.5.3. * Last error is: Invoke remote method timeout. method: getALlUsers, * provider: dubbo://172.16.0.89:20880/com.alibaba.dubbo.service.UserService?anyhost=true&application=demotest-consumer&check=false&dubbo=2.5.3&interface=com.alibaba.dubbo.service.UserService&methods=get,remove,getALlUsers,getAll,modify,create&organization=dubbox&owner=programmer&pid=25392&revision=0.0.1&side=consumer&timeout=1000×tamp=1535459828035, * cause: Waiting server-side response timeout. start time: 2018-08-28 20:47:05.058, end time: 2018-08-28 20:47:06.060, * client elapsed: 1 ms, server elapsed: 1001 ms, * timeout: 1000 ms,* request: Request [id=17, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=getALlUsers, parameterTypes=[], arguments=[], attachments={path=com.alibaba.dubbo.service.UserService, interface=com.alibaba.dubbo.service.UserService, timeout=1000, version=0.0.0}]], * channel: /172.16.0.89:58375 -> /172.16.0.89:20880*/@Overridepublic List<User> getALlUsers(){logger.debug("getALlUsers in...");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}return userMapper.getAllUsers();}}
package com.alibaba.dubbo.mapper;import java.io.Serializable;
import java.util.List;import org.apache.ibatis.annotations.Mapper;import com.alibaba.dubbo.common.CrudMapper;
import com.alibaba.dubbo.domain.Role;
@Mapper
public interface RoleMapper <T extends Serializable> extends CrudMapper<T>{List<Role> getAllRoles();
}
package com.alibaba.dubbo.mapper;import java.io.Serializable;
import java.util.List;import org.apache.ibatis.annotations.Mapper;import com.alibaba.dubbo.common.CrudMapper;
import com.alibaba.dubbo.domain.User;
@Mapper
public interface UserMapper <T extends Serializable> extends CrudMapper<T>{List<User> getAllUsers();
}
启动成功:
打开http://localhost:7001控制台:
然后看下http://localhost:8080/监控中心:
然后,我们将消费者也创建出来,我们将其创建为一个springboot的web工程:
创建完成,引入dubbo-interface这个接口包:
将之前dubbo-consumer工程的代码拷贝过来:
接着引入dubbo和springboot的依赖:
<!-- dubbo和springboot整合的依赖包 --><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.0</version></dependency>
代码:
package com.alibaba.dubbo.consumer.controller;import java.util.List;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.dubbo.common.JsonDTo;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.domain.Role;
import com.alibaba.dubbo.service.RoleService;@Controller
public class RoleController {private final static Logger logger = LogManager.getLogger(RoleController.class);//自动注入远程服务@Referenceprivate RoleService<Role> roleService;@RequestMapping(value = "/getAllRoles", method = RequestMethod.GET)public @ResponseBody Object getAllUsers() throws Exception {logger.debug("getAllRoles in............");JsonDTo jsonDto = new JsonDTo();try{List<Role> roles = roleService.getALlRoles();jsonDto.setData(roles);}catch(Exception e){logger.error(e);}return jsonDto;}}
package com.alibaba.dubbo.consumer.controller;import java.util.List;import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.dubbo.common.JsonDTo;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.domain.User;
import com.alibaba.dubbo.service.UserService;@Controller
public class UserController {private final static Logger logger = LogManager.getLogger(UserController.class);//自动注入远程服务@Referenceprivate UserService<User> userService;@RequestMapping(value = "/getAllUsers", method = RequestMethod.GET)public @ResponseBody Object getAllUsers() throws Exception {logger.debug("test in............");JsonDTo jsonDto = new JsonDTo();try{List<User> users = userService.getALlUsers();jsonDto.setData(users);}catch(Exception e){logger.error(e);}return jsonDto;}}
package com.alibaba.dubbo.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;@EnableDubbo
@SpringBootApplication
public class BootDubboConsumerApplication {public static void main(String[] args) {SpringApplication.run(BootDubboConsumerApplication.class, args);}
}
#自定义启动端口
server.port=7777#dubbo服务提供者的应用名称
dubbo.application.name=boot-demotest-consumer
#dubbo注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181#dubbo监控中心协议
dubbo.monitor.protocol=registry
启动!
再看控制台:http://localhost:7001/
再看监控中心:http://localhost:8080/applications.html
可以看到监控中心中服务提供者被一个消费者使用:
以及请求成功数等信息
访问:http://localhost:7777/getAllUsers
及接口的访问报表:
至此,springboot和dubbo整合完成!
dubbo整合springboot图解版(九)相关推荐
- SpringBoot+Dubbo整合
说明: 由于此文章是博主2017年学习时写的文章,项目dubbo版本过低,新项目不应该继续采用此版本.阿里巴巴已经将dubbo重新维护并捐给Apache开源组织,新起了比较新版本的项目整合.学习整合的 ...
- SpringBoot+Dubbo整合(一)
前期条件: 启动Zookeeper.Dubbo-Monitor-Simple.Dubbo-Admin:https://blog.csdn.net/qq_37598011/article/details ...
- springBoot+dubbo整合Redis - 脚手架系列(三)
1.介绍 Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库. Redis 可以存储键和五种不同 ...
- Dubbo和zookeeper整合SpringBoot时日志冲突问题
Dubbo和zookeeper整合SpringBoot时日志冲突问题: 我们在整合springboot,添加依赖的时候,会遇到日志冲突的问题,需先排除自带的zookeeper, 然后单独引入z ...
- 微信公众号授权步骤详细步骤介绍和整合springboot开发(java版)
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 一.微信公众号授权步骤 首先到微信公众平台注册账号,可以看到有四种类型(服务号,订阅号,小程 ...
- ❤️《分布式 Dubbo+Zookenper+SpringBoot》(建议收藏)❤️
分布式 Dubbo+Zookenper+SpringBoot 文章目录 分布式 Dubbo+Zookenper+SpringBoot 1.分布式理论 1.什么是分布式系统? 2.Dubbo文档 3.单 ...
- Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用
目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...
- 非常详细的FastDFS整合springBoot教程-带文件下载地址
FastDFS整合springBoot教程 编写该教程的目的 本教程基于已有的springBoot框架进行整合,springBoot构架部分不做教学 为了给自己做笔记,同时为所需童鞋少爬点坑. 目录 ...
- Day374.shiro授权Shiro+jsp整合Springboot -Shiro
Shiro授权 一.授权 授权,即访问控制,控制谁能访问哪些资源.主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的. 二.关键对象 授权可简单理解为who对what( ...
最新文章
- Go 初体验 - 令人惊叹的语法 - defer.3 - defer 函数参数计算时机
- HTML5的未来 - HTML5 还能走多远?
- PyTorch-训练
- 数据类型之Integer与int
- Modbus协议栈开发笔记之三:Modbus TCP Server开发
- arm交叉编译jsoncpp
- 计算机维修与护理论文,计算机维修与维护方面论文选题 计算机维修与维护论文题目怎样定...
- 标识符——Python
- 链表的相关面试题(完整)(C语言)
- 机器视觉基础知识(一)
- windows如何解压tar.gz文件
- zib机器人怎么_ZIB智伴机器人好不好 ZIB智伴机器人使用测评
- 基于Vue的单页面格式化数据高亮编辑器组件:兼容json/xml/html/txt多种格式
- 迅雷看看引领高清内容多屏合一新趋势
- 微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录
- 事务开启SpringBoot报错 The bean ‘xxxImpl’ could not be injected as a ‘com.xxx.service.impl.xxxServiceImpl
- 网络摄像头Androi端显示(mjpeg)源码分析
- 远远被大家低估了的实用智能家居设备——窗帘电机
- Python学习笔记1入门+简单结构+数据类型+常用操作符
- 【多元统计分析】12.逐步回归
热门文章
- 小伙创业做奶茶,兢兢业业把奶茶店已经扩张到了10家分店
- 电力系统数字化转型历史(跨部门系统自建阶段)
- 怎样才能在网上卖东西,手把手教你闲鱼卖货!
- 封面文章:寻找技术中国——渴望不再被扼住喉咙!
- 自研机器人协调控制系统(2)——六足舞蹈篇
- 考研前夕 — 成人的世界里没有那么多童话
- mysql查询最后一条记录
- 湖北刷脸支付:中国银联联合商业银行推出“刷脸付”产品
- macos最新版本是什么_macOS的最新版本是什么?
- python下载vip素材_《自拍教程54》Python_批量下载1000个apk(附练手素材)