服务注册框架包含客户端内容,服务端内容。
客户端
客户端初始化
在Spring配置文件中初始化自己的lifebean
<bean id="consumerLifeBean" class="com.umetrip.register.domain.ConsumerLifeBean" lazy-init="false" >
</bean>
同时被配置的还有HttpInvokerRequestExecutor,你可以使用spring自带的,也可以自己实现,比如加上Hystrix的功能。使用httpclient进行网络通信,你可以对其设置一些参数。
<bean id="springHttpInvokerRequestExecutor"
class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
<property name="httpClient" ref="httpclient" />
</bean>
同时还有listener,在context初始化时候添加,用于完成在zookeeper上的注册。
<listener>
<listener-class>xxx.common.listener.ConsumerStartUpSubListener</listener-class>
</listener>
服务发现
public ServiceInstance<InstanceDetails> getInstanceByName(String serviceName) throws Exception {
ServiceProvider<InstanceDetails> provider = providers.get(serviceName);
if (provider == null) {
synchronized (lock) {
provider = providers.get(serviceName);
if (provider == null) {
provider = serviceDiscovery.serviceProviderBuilder().
serviceName(serviceName).
providerStrategy(new RandomStrategy<InstanceDetails>())
.build();
provider.start();
closeableList.add(provider);
providers.put(serviceName, provider);
}
}
}
return provider.getInstance();
}
监听服务变更事件
服务端
服务端初始化
在spring配置文件中配置自己的lifebean。
<bean id="serviceLifeBean" class="xxx.register.domain.LifeBean" lazy-init="false" >
<property name="providerMark" value="${providerMark}"></property>
<property name="providerPort" value="${providerPort}"></property>
</bean>
同时被配置的还有自己的心跳服务
<bean name="/serviceHeartbeat"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="heartBeatSVC" />
<property name="serviceInterface" value="xxx.register.heartbeat.IHeartBeatSVC" />
</bean>
配置filter
在web.xml中部分代码
<filter>
<filter-name>catLogFilter</filter-name>
<filter-class>xxx.filter.UnityAccessFilter</filter-class>
</filter>
UnityAccessFilter类部分代码
@Override
public void init(FilterConfig config) throws ServletException {
Filter ipFilter = new IpFilter();
ipFilter.init(config);
filters.put(new Pattern("/*"), ipFilter);
}
除了过滤IP,还可以利用filter进行访问打点,日志追踪和Hystrix。