1.Dubbo集群与负载均衡
2.服务降级:指的是当服务器资源紧张的时候,暂停掉一些不重要的微服务,从而将所有的服务器的资源统一交由另外一个核心的微服务处理
• 【dubbo-api】如果要想实现服务降级的处理,在Dubbo之中需要为业务接口设计一个降级时的处理业务类即可
package com.yootk.dubbo.service;
import com.yootk.dubbo.service.IMessageService;
import com.yootk.dubbo.vo.Message;
public class IMessageServiceMock implements IMessageService {
@Override
public Message echo(Message msg) {
Message echoMessage = new Message() ;
echoMessage.setSender("【ECHO】Nothing...");
echoMessage.setTitle("【ECHO】Nothing...");
echoMessage.setContent("【ECHO】Nothing...");
return echoMessage;
}
}
• 【dubbo-echo-consumer】所有的服务降级的处理操作全部都是在客户端上处理完成的,修改客户端的接口注入配置
@Reference(mock="true",check=false)
private IMessageService messageInstance;
那么现在就有一个问题了,如果所有的业务接口都使用这样的一种Mock实现类型,这个时候一定会造成代码的维护困难,所以还有一种简单的做法,让数据直接返回null,一旦服务不可用,返回一个null对象,而这种配置只需要在消费端的注解上定义即可。
@Reference(mock="return null",check=false)
private IMessageService messageInstance;
3.ZooKeeper认证:在以后实际的开发之中,一定要为ZooKeeper设置ACL认证,才可以更好的进行注册内容的保护,同时防止其他用户盗取你的网络资源。
• 【zookeeper-cluster-*】为根目录设置Zookeeper的认证信息,同时建议删除已经存在的所有dubbo路径信息
• 删除当前已经存在的所有dubbo的路径:deleteall /dubbo
• 追加一个新的数字认证信息:addauth digest zkuser:hellolee
• 为zkuser的账户设置权限:setAcl / auth:zkuser:hellolee:crwda
• 【zookeeper-echo-*】修改服务提供者与服务消费者的dubbo.properties配置文件,追加账户信息:
dubbo.registry.username=zkuser
dubbo.registry.password=hellolee
• 【zookeeper-echo-*】修改服务提供者与服务消费者的spring配置文件
• 【zookeeper-echo-provider】spring-dubbo-provider.xml:
<!-- 在进行Dubbo服务注册的时候一定要将服务注册到ZooKeeper之中 -->
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}"
timeout="${dubbo.provider.timeout}" file="${dubbo.registry.file}"
username="${dubbo.registry.username}"
password="${dubbo.registry.password}" client="curator"/>
• 【zookeeper-echo-provider】spring-dubo-consumer.xml:
<!-- 在进行Dubbo服务注册的时候一定要将服务注册到ZooKeeper之中 -->
<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}"
timeout="${dubbo.provider.timeout}"
username="${dubbo.registry.username}"
password="${dubbo.registry.password}" client="curator"/>
4.Dubbo直连与Token认证
• 修改服务提供端的配置文件,引入token的配置项:
<dubbo:provider timeout="${dubbo.provider.timeout}"
dispatcher="message" threadpool="fixed" threads="8" token="true"/>
• 修改消费端的@Reference注解,将其设置为默认形式的引用配置:在日后所有的项目开发之中,dubbo服务端一定要开启token认证,这才是标准的项目开发。
@Reference(mock="return null",check=false)
private IMessageService messageInstance;