在项目中引入dubbo框架的众多注意事项

一、分离前后端

1、把user项目拆开web前端和service后端。
2、gmall-user-web和gmall-user-service
3、比如双11来的时候,高并发的时候,前端压力小,后端大,就可以合理的分配机器分担压力到哪一层。
4、把他们分开的原因,一可以合理分配资源。二灵活的调用各种服务

二、在项目当中引入dubbo服务框架

1、把他们都拆开后
在这里插入图片描述
在service里引入父依赖、api、service通用工具包
在web里引入父依赖、api、web通用工具包

在dubbo框架中,他们的流程就是:
先用service后端发布dubbo服务,然后用web前端去消费

2、dubbo框架要引入到common-util的通用工具包中,因为service和web层将来都要用dubbo进行通讯
依赖如下:

<dependency>
    <!--dubbo框架-->
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
</dependency>

<dependency>
    <!--用了app线程直接去同步注册中心的信息-->
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <!--整合框架-->
    <groupId>com.gitee.reger</groupId>
        <artifactId>spring-boot-starter-dubbo</artifactId>
</dependency>

三、在项目的服务端引入注解:

1、在service后端包含:service的impl实现包mapper包
注意:这里的service的注解要引用阿里的dubbo框架的。
远程过程调用,这里要包含dubbo的rpc的协议,所以要引入dubbo框架的service
在这里插入图片描述
2、还有这里要谨记,经常出错,之前有发表过文章提示了。
因为mapper接口继承了通用mapper(单表的增删改查),用到了mapper技术。
所以这里引入扫描mapper包注解@MapperScan记得用tk.mybatis下的注解
在这里插入图片描述
3、Consumer和provider之间用的dubbo协议进行通讯
Consumer和provide通过zookeeper协议进行通讯,是一个小的app线程去同步他们的注册中心
在这里插入图片描述

四、配置dubbo的协议和zookeeper协议

1、在application下配置dubbo和zookeeper

#服务端口号
server.port=8070

#jdbc连接数据库
spring.datasource.password=123
spring.datasource.username=root
spring.datasource.url=jdbc:mysql://localhost:3306/gmall_study?characterEncoding=UTF-8

#mybatis配置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.configuration.map-underscore-to-camel-case=true

#日志级别
logging.level.root=debug

#dubbo的协议

#dubbo中的服务名称
spring.dubbo.application=user-service

#dubbo的通讯协议名称
spring.dubbo.protocol.name=dubbo

#zookeeper注册中心地址
spring.dubbo.registry.address=172.25.0.11:2181

#zookeeper的通讯协议名称
spring.dubbo.registry.protocol=zookeeper

#dubbo服务的扫描路径
spring.dubbo.base-package=com.atguigu.gmall

这里有一个坑,172.25.0.11:2181是我的虚拟机下的Linux系统的ip地址和端口。
因为我的系统没有开发这个2181端口,这里就会报错连接不上zookeeper。
姑且还要到Linux系统当中开放这个2181端口!具体开放端口方法看上边发表的文章。

2、全部配置好之后,用debug日志级别输出,运行之后就可以看到zookeeper.ClientCnxn 发过来的的同步信息心跳的ping了,每次都ping一下,每时每刻都在同步dubbo
在这里插入图片描述
3、选择应用—提供者,配置文件的dubbo协议里的服务名称user-service就是这个提供者,也就是容器名

#dubbo中的服务名称
spring.dubbo.application=user-service

在这里插入图片描述
4、点击这位提供者查看,他提供了这样的服务
在这里插入图片描述

五、Service提供了服务,那web就要去消费了。

运行客户端controller层

1、这里有controller包,注意,在这下面的类,之前用的注解@Autowired,但这个是在同一个容器中(同一个模块中)才可以使用
2、现在是要跨模块连接service,要远程协议代理,要用dubbo的注解@Reference
在这里插入图片描述
3、dubbo在进行dubbo协议通讯时,需要实现序列化接口(封装的数据对象)
就是要在实体类中实现 implements Serializable
在这里插入图片描述

六、同时运行service后端8070Tomcat端口和web前端8080Tomcat端口

在这里插入图片描述
在页面上能正常获取数据。
在这里插入图片描述
在dubbo监控中心就可以看到消费者web了。!!!!!!
在这里插入图片描述
点击消费者web查看,这个web消费了service
在这里插入图片描述

七、延长dubbo监控中心的响应时间

1、dubbo的consumer在三秒内每隔一秒进行一次重新访问,默认一秒超时,三次访问之后会直接抛超时异常,所以我们在开发阶段,可以将consumer设置超时时间延长,这样才方便断点调试。
在application的配置文件加上这个延长超时时间:

#设置超时时间,1000毫秒为单位,600 000600秒 , 10分钟
spring.dubbo.consumer.timeout=600000

2、设置检测服务端是否先启动了,再启动consumer客户端,这样才符合逻辑。
得先提供服务,你再有客户端去消费!!!故在application配置文件加入下面代码:

#设置检测服务是否存在
spring.dubbo.consumer.check=false

八、采用 dubbo框架,谨记实体类要进行序列化implements Serializable

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值