非springboot项目初始化服务注册发现和ribbon

这周没写博客,写个例子吧

package com.xianjingxia.paymentclient.paycenter;

import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.EurekaInstanceConfig;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.MyDataCenterInstanceConfig;
import com.netflix.appinfo.providers.EurekaConfigBasedInstanceInfoProvider;
import com.netflix.discovery.DefaultEurekaClientConfig;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaClient;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.loadbalancer.*;
import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList;
import com.netflix.niws.loadbalancer.DiscoveryEnabledServer;

import javax.inject.Provider;

/**
 * Created by xuehan on 2017/7/31.
 */
public class ServerProvider {


    private static ApplicationInfoManager applicationInfoManager;
    private static EurekaClient eurekaClient;

    private static synchronized ApplicationInfoManager initializeApplicationInfoManager(EurekaInstanceConfig instanceConfig) {
        if (applicationInfoManager == null) {
            InstanceInfo instanceInfo = new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get();
            applicationInfoManager = new ApplicationInfoManager(instanceConfig, instanceInfo);
        }

        return applicationInfoManager;
    }

    private static synchronized EurekaClient initializeEurekaClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig clientConfig) {
        if (eurekaClient == null) {
            eurekaClient = new DiscoveryClient(applicationInfoManager, clientConfig);
        }

        return eurekaClient;
    }

    private static DiscoveryEnabledServer getServer(String serviceName) {

        ApplicationInfoManager applicationInfoManager = initializeApplicationInfoManager(new MyDataCenterInstanceConfig());
        final EurekaClient client = initializeEurekaClient(applicationInfoManager, new DefaultEurekaClientConfig());


        Provider<EurekaClient> eurekaClientProvider = new Provider<EurekaClient>() {
            public synchronized EurekaClient get() {
                return client;
            }
        };

        ServerList<DiscoveryEnabledServer> list = new DiscoveryEnabledNIWSServerList(serviceName, eurekaClientProvider);

        IRule rule = new AvailabilityFilteringRule();
        ServerListFilter<DiscoveryEnabledServer> filter = new ZoneAffinityServerListFilter<DiscoveryEnabledServer>();
        ZoneAwareLoadBalancer<DiscoveryEnabledServer> lb = LoadBalancerBuilder.<DiscoveryEnabledServer>newBuilder()
                .withDynamicServerList(list)
                .withRule(rule)
                .withServerListFilter(filter)
                .buildDynamicServerListLoadBalancer();
        DiscoveryEnabledServer server = (DiscoveryEnabledServer) lb.chooseServer();
        return server;
    }

    public static ServerInfo getServerInfo(String serviceName){
        DiscoveryEnabledServer server = getServer(serviceName);
        ServerInfo serverInfo = null;
        if(server != null){
            serverInfo = new ServerInfo();
            serverInfo.setIp(server.getHost());
            serverInfo.setPort(server.getPort());
         }
         return  serverInfo;
    }

}

通过上面的方式可以动态的服务发现,注意需要在classpath下配置eureka-client.properties的配置文件

eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://peer2:8762/sds/eureka/
eureka.decoderName=JacksonJson

 

转载于:https://my.oschina.net/zaxb/blog/1503808

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值