1. 程式人生 > >SpringBoot開發案例之整合Dubbo提供者(一)

SpringBoot開發案例之整合Dubbo提供者(一)

 

既然是開發案例,顯然不會扯那麼多老婆舌,有不清楚這兩個東東的請自行百度。

0

開發環境

JDK1.7、Maven、Eclipse、SpringBoot1.5.1、Dubbo2.8.4

專案結構

1

相關配置

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.itstyle.dubbo</groupId>
  <artifactId>spring-boot-dubbo-provider</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
  <name>springBoot_dubbo_provider</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.7</java.version>
  </properties>
  
  <!-- spring-boot-starter-parent包含了大量配置好的依賴管理,在自己專案新增這些依賴的時候不需要寫<version>版本號 -->
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/>
  </parent>
  <!-- 配置依賴 -->
  <dependencies>
        <!-- springboot相關 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Dubbo相關 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <!-- 這裡使用最新的2.8.4版本,中央倉庫不存在,請自行打入本地倉庫 -->
            <version>2.8.4</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- zookeeper 註冊中心 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- zookeeper 第三方操作工具類 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.6</version>
        </dependency>
        <!-- javassist 位元組碼類庫 -->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
        </dependency>
  </dependencies>
  <build>
        <plugins>
            <!-- 打包專案 mvn clean package -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <!-- mvn spring-boot:run 熱部署啟動 -->
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.4.0.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

User.java 一定要實現序列化介面

public class User implements Serializable {

    private static final long serialVersionUID = -1L;

    private String username;
    private Integer age;

    public User(String username, Integer age) {
        this.username = username;
        this.age = age;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

IUserService.java 介面

public interface IUserService {
    void saveUser(User user);
}

UserServiceImpl.java 實現

@Service("userService")
public class UserServiceImpl implements IUserService {
    @Override
    public void saveUser(User user) {
        System.out.println("儲存使用者:"+user.getUsername());
    }
}

dubbo.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 提供方應用資訊 -->
    <dubbo:application name="springBoot_dubbo_provider"  />

    <!-- 註冊中心服務地址 -->
    <dubbo:registry  protocol="zookeeper" address="${dubbo.registry.address}"  check="false" />

    <!-- 用dubbo協議-->
    <dubbo:protocol name="dubbo" port="-1" dispather="all" check="false" />
    
    <dubbo:provider timeout="10000"  threads="10" threadpool="fixed"   loadbalance="roundrobin"/>
    
    <!-- 宣告需要暴露的服務介面 -->
    <dubbo:service interface="com.itstyle.dubbo.service.IUserService" ref="userService"/>


</beans>

application.properties

# 專案contextPath,一般在正式釋出版本中,我們不配置
server.context-path=/provider
# 錯誤頁,指定發生錯誤時,跳轉的URL。請檢視BasicErrorController原始碼便知
server.error.path=/error
# 服務埠
server.port=8080
# session最大超時時間(分鐘),預設為30
server.session-timeout=60
# 該服務繫結IP地址,啟動伺服器時如本機不是該IP地址則丟擲異常啟動失敗,只有特殊需求的情況下才配置
# server.address=192.168.16.11

# tomcat最大執行緒數,預設為200
server.tomcat.max-threads=800
# tomcat的URI編碼
server.tomcat.uri-encoding=UTF-8

#ZooKeeper
dubbo.registry.address=192.168.1.180:2181
logging.level.root=INFO

SpringbootDubboApplication.java 測試類

@SpringBootApplication
@ComponentScan(basePackages={"com.itstyle.dubbo"})
@ImportResource({"classpath:dubbo.xml"})
public class SpringbootDubboApplication implements CommandLineRunner {
    @Autowired
    private IUserService userService;

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDubboApplication.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
       User user = new User("張三",19);
       userService.saveUser(user);
    }
}

此時,我們執行SpringbootDubboApplication類,如下結果說明成功:
2

然後使用ZooInspector檢視zookeeper資訊,會發現註冊了一個提供者:

3

專案:http://git.oschina.net/52itstyle/springboot_dubbo_provider

作者: 小柒

出處: https://blog.52itstyle.com

原文位置:https://m.aliyun.com/yunqi/articles/131864