从零开始构建服务注册-概述

服务注册框架包含客户端内容,服务端内容。

客户端

客户端初始化

在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。

其他

分布式锁

猜你喜欢

转载自blog.csdn.net/define_us/article/details/80063975
今日推荐