1. 程式人生 > >這特麼是啥系列之----HSF求求你別秀了

這特麼是啥系列之----HSF求求你別秀了

如何釋出HSF服務

感覺這個hsf需要pandora環境,所以...先導依賴

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId
>
<version>1.5.9.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.taobao.pandora</groupId> <artifactId>pandora-boot-starter-bom</artifactId
>
<version>2018-01-release</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId
>
pandora-hsf-spring-boot-starter</artifactId> </dependency>

配置...

在 application.properties 新增所有 HSF的預設版本資訊和客戶端超時資訊, 樣例配置如下:

spring.hsf.group=HSF
spring.hsf.version=1.0.0.DAILY
spring.hsf.timeout=3000
@SpringBootApplication

public class DemoApplication{
    public static void main(String[] args) {
        PandoraBootstrap.run(args);
        SpringApplication.run(DemoApplication.class, args);
        PandoraBootstrap.markStartupAndWait();
    }
}

@HSFProvider

注意是com.alibaba.boot.hsf.annotation.HSFProvider,不是com.taobao.hsf.app.spring.util.annotation.HSFProvider

編寫你的HSF服務, 只需要在要釋出的服務實現上新增 @HSFProvider, 其中 serviceInterface 是要釋出服務的介面:

@HSFProvider(serviceInterface = DemoService.class)
public class DemoServiceImpl implements DemoService{}

可以使用 @HSFProvider 為特定的服務覆蓋全域性預設配置, 如:

@HSFProvider(serviceInterface = DemoService.class, serviceGroup = "HSF", serviceVersion = "1.0.1", clientTimeout = 500)
public class DemoServiceImpl implements DemoService{}

@HSFProvider 中的 serviceGroup 和 serviceVersion 以及其他 String 型別的配置都可以支援 Spring 的 property placeholder, 如:

@HSFProvider(serviceInterface = DemoService.class, serviceGroup = "${service.group.name}")
public class DemoServiceImpl implements DemoService{}

注意:spring boot預設只掃描main函式所在的package。如果服務是在其它的package裡,需要配置@ComponentScan

@ComponentScan(basePackages = "com.taobao.mypackage")

然後呢...就是消費這個服務了

啟動類要配置註解..

@SpringBootApplication

使用傳統的 XML 方式裝配 HSF Spring Bean。

建立一個 Spring 配置檔案,如 src/main/resources/hsf-consumer.xml,表示要引用相關的hsf的服務。內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="helloWorldConsumer" class="com.taobao.hsf.app.spring.util.HSFSpringConsumerBean" init-method="init">
        <property name="interfaceName" value="com.acme.DemoService"/>
        <property name="version" value="1.0.0.daily"/>
        <property name="group" value="HSF"/>
    </bean>
</beans>

在Spring Boot Application類上新增 @ImportResource 匯入自定義的 hsf-consumer.xml 檔案,這樣spring hsf服務對應的bean就會被初始化.

@ImportResource({"classpath:hsf-consumer.xml"})
@SpringBootApplication
public class DemoApplication {}

接下來就是在程式碼中直接引入HSF服務的介面類,程式碼如下:

@Autowired
DemoService demoService;
嗯嗯嗯,會發布服務,消費服務就行,不會再看api