1. 程式人生 > >dubbo使用小全 分析 理解 附GitHub 原始碼 ( 二 )

dubbo使用小全 分析 理解 附GitHub 原始碼 ( 二 )

宣告

1.搭建簡單工程:

在springboot大行其道的今天,本文用純註解方式使用dubbo

1.依賴

   <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.4</version>
        </dependency>
        <!--補充dubbo依賴的netty包-->
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-core</artifactId>
            <version>3.1.2</version>
        </dependency>

2.provider

2.1 服務提供方配置資訊,以後的各種使用,基本都在此處

/**
 * @author peichanglei
 * @date 2018/11/02 12:16
 */
@Configuration
public class DubboProviderConfig {
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("provider-test");
        return applicationConfig;
    }

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("multicast://224.5.6.7:1234");
        registryConfig.setClient("curator");
        return registryConfig;
    }

    @Bean
    public ProviderConfig providerConfig() {
        ProviderConfig providerConfig = new ProviderConfig();

        /**
         * 叢集容錯模式,設定重試次數(不含第一次)
         */
        providerConfig.setRetries(2);
        return providerConfig;
    }
}

2.2.具體提供的服務,真實的專案中需單獨打包此介面,讓提供,消費雙方方使用 在這裡插入圖片描述 2.3 application啟動類上加暴露服務掃描

@SpringBootApplication
@DubboComponentScan(basePackages = "com.lei.record.service.impl")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.4實現服務,對外暴露

import com.alibaba.dubbo.config.annotation.Service;
import com.lei.record.service.UserService;

/**
 * @author peichanglei
 * @date 2018/11/02 2:00
 */
@Service(timeout = 3000)
public class UserServiceImpl implements UserService {
    @Override
    public String getUser(Long id) {
        return "provider user " + id;
    }
}

注意:此處使用dubbo的Service註解暴露,不能是spring的

3.consumer

3.1服務提供方配置資訊,以後的各種使用,基本都在此處

@Configuration
public class DubboConfiguration {
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("consumer-test1");
        //經典錯誤導致:dubbo的qos預設埠為22222,區別於應用埠和dubbo服務埠,如果在一臺機器上啟動超過1個dubbo服務,就會衝突,不管是provider還是consumer
        applicationConfig.setQosPort(22223);
        return applicationConfig;
    }

    @Bean
    public ConsumerConfig consumerConfig() {
        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setTimeout(3000);
        //啟動時檢查,預設為true,當服務不可用或多個應用存在迴圈依賴,需關閉檢測,以防啟動失敗,若後面時間中,服務恢復,dubbo的心跳檢查會自動連上
        consumerConfig.setCheck(false);
        return consumerConfig;
    }

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("multicast://224.5.6.7:1234");
        registryConfig.setClient("curator");
        return registryConfig;
    }
}

3.2 引入定義好的介面jar包,不在贅述 3.3 application啟動類上加引用服務包的掃描

@SpringBootApplication
@DubboComponentScan(basePackages = "com.lei.record.service")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3.4服務消費

@Controller
public class User {
    @Reference
    private UserService userService;

    @RequestMapping(value = "getName", method = {RequestMethod.GET}, produces = "application/json")
    @ResponseBody
    public String getName() {
        String result;
        if (userService != null) {
            String user = userService.getUser(12L);
            System.out.println("呼叫成功------" + user);
            result = "呼叫成功------" + user;
        } else {
            System.out.println("呼叫失敗------");
            result = "呼叫失敗------";
        }
        return result;
    }
}

import com.alibaba.dubbo.config.annotation.Reference註解可注入可使用的服務

4,至此,一個基於dubbo的生產消費架構搭建完成

頁面訪問顯示呼叫成功 在這裡插入圖片描述 以上為簡單呼叫,更多的配置資訊科參考下篇.