spring-boot + dubbo + zookeeper

1.前言

博客上偶然看到 spring-boot + duboo 開發, 本身一直沒有接觸過度布式,手癢的作了一次搭建,記錄下心得.java

2.zookeeper啓動

https://www.apache.org/dyn/closer.cgi/zookeeper/ 下載 zookeepermysql

修改 conf  下的  zoo_sample.cfg 名稱爲  zoo.cfg web

在bin目錄下啓動 zkServer.cmd 命令腳本.spring

這樣註冊中心就搭建好了.sql

3. dubbo 服務接口

   3.1 新建spring boot 項目 

  名稱爲 apache

    <groupId>com.example</groupId>
    <artifactId>spring-boot-demo-dubbo-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-boot-demo-dubbo-interface</name>

  pom文件 爲springboot

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

 

 

  3.2 新建 model 類 

 
 

package com.dubbo.test.model;app

 
 

import java.io.Serializable;
import java.util.Objects;eclipse

 
 

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;maven


@Entity
public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private long id; private String userName; private String password; private int age; }

  建議使用 lombok

  3.3 創建服務接口

package com.dubbo.test.service;

import com.dubbo.test.model.User;

public interface UserService {

    public void save(User user);

    public String sayHello(String word);
}

  3.4 maven clean  + maven install 打包成 jar包

(注意 :  須要刪除 src/test/java 下的 默認生成的測試類, 不然會報錯.  由於這個差點放棄搭建 )

4. 導入 jar 包到maven 倉庫

雖然命令行也能夠使用 , 不過我這裏推薦使用eclipse導入jar包,圖形化界面操控起來方便. 點擊 install or deploy an artifact to a Maven repository

直接導入便可.

5. 搭建生產者

  5.1 pom 文件

  

<dependencies>
        <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>
           <!-- 加入springboot與dubbo集成的起步依賴 -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        
        <!-- 因爲使用了zookeeper做爲註冊中心,則須要加入zookeeper的客戶端jar包: -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        
         <!-- spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
     <!-- 添加接口服務 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>spring-boot-demo-dubbo-interface</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

  5.2 application.properties 配置

  

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test_1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=zhongyi2017!

spring.jpa.properties.hibernate.hbm2ddl.auto=create
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true

# 訪問端口
server.port=8080
# dubbo配置
dubbo.application.name=springboot-dubbo-provider
dubbo.registry.address=zookeeper://61.149.178.123:2181

  5.3  新建dao 層  

package com.dubbo.test.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.dubbo.test.model.User;

public interface UserRepository extends JpaRepository<User, Integer>{

}

  5.4 新建 service 實現層

  

package com.dubbo.test.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.test.dao.UserRepository;
import com.dubbo.test.model.User;

@Service
@Component
public class UserServiceImpl implements UserService{
    @Autowired
    private UserRepository userRepository;
        
    @Override
    public void save(User user) {
        userRepository.save(user);
    }

    @Override
    public String sayHello(String word) {
        return word;
    }

}

  @Service  使用的 dubbo提供的註解

  5.5 啓動類中添加 @EnableDubbo

   

package com.dubbo.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.dubbo.test.model.User;

@SpringBootApplication
@EnableDubbo
public class SpringBootDemoDubboProviderApplication {

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

}

  5.6 啓動 

 6. 搭建消費者

  6.1 pom 文件  同 生產者同樣

  6.2 application.properties 配置

  

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test_1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=zhongyi2017!

# WEB\u670D\u52A1\u7AEF\u53E3
server.port=8081
# dubbo\u914D\u7F6E
dubbo.application.name=springboot-dubbo-consumer
dubbo.registry.address=zookeeper://61.149.178.123:2181 

  6.3 新建 controller 層

  

package com.dubbo.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.test.model.User;
import com.dubbo.test.service.UserService;

@RestController
public class UserController {
    @Reference // 該註解是dubbo提供的
    private UserService userService;

    @RequestMapping("/say")
    public String sayHello(String name) {
        return userService.sayHello(name);
    }

    @RequestMapping("/save")
    public void save() {
        User u = new User();
        u.setAge(20);
        u.setPassword("123");
        u.setUserName("zheng");
        userService.save(u);
    }
}

  6.4 添加 @EnableDubbo 註解

  

package com.dubbo.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo
public class SpringBootDemoDubboConsumerApplication {

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

}

  6.5 啓動

7. 測試

 

 

 

8.總結

 就是一些工具,可能我把分佈式想簡單了吧,這只是本身寫的demo,沒有真正經歷生產環境.

但願本身能一直保持學習的態度學習下去.

相關文章
相關標籤/搜索