springboot整合dubbo注解方式


工程結構:

主pom

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>
        <module>service-privder</module>
        <module>service-consumer</module>
        <module>service-common</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cxy</groupId>
    <artifactId>springboot-dubbo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-dubbo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--引入dubbo start依賴-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

注意事項:引入圖中整個dubbo依賴時候要加入這個zookeeper的依賴,不然會報calssnotfound錯誤:

common代碼:

1 pom

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-dubbo</artifactId>
        <groupId>com.cxy</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-common</artifactId>


</project>

2 product

package com.cxy.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product implements Serializable {

    // 產品序列號
    private int id;

    // 產品名稱
    private String name;

    // 是否貴重品
    private Boolean isPrecious;

    //生產日期
    private Date dateInProduced;

    //產品價格
    private float price;
}

api

package com.cxy.api;



import com.cxy.bean.Product;

import java.util.List;


public interface IProductService {

    Product queryProductById(int id);

    List<Product> queryAllProducts();
}

privoder代碼

1 pom

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-dubbo</artifactId>
        <groupId>com.cxy</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-privder</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.cxy</groupId>
            <artifactId>service-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

2 productservice

package com.cxy.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.cxy.api.IProductService;
import com.cxy.bean.Product;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author
 * @description : 產品提供接口實現類
 */
@Service(timeout = 5000,version="1.0.0",interfaceClass = IProductService.class)
@Component
public class ProductService implements IProductService {

    private static List<Product> productList = new ArrayList<>();

    static {
        for (int i = 0; i < 20; i++) {
            productList.add(new Product(i, "產品" + i, i / 2 == 0, new Date(), 66.66f * i));
        }
    }

    public Product queryProductById(int id) {
        for (Product product : productList) {
            if (product.getId() == id) {
                return product;
            }
        }
        return null;
    }


    public List<Product> queryAllProducts() {
        List<Product> myProductList = new ArrayList<>();
        myProductList.add(new Product(1,"洗衣機",true,new Date(),66.66f));
        myProductList.add(new Product(2,"洗衣機",true,new Date(),66.66f));
        return myProductList;
    }
}

3 啟動類:

package com.cxy;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo //開啟dubbo的注解支持
public class BootDubboProviderApplication {

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

}

4 yml:

dubbo:
  application:
    name: boot-duboo-provider
  # 指定注冊協議和注冊地址  dubbo推薦使用zookeeper作為注冊中心,並且在start依賴中引入了zookeeper的java客戶端Curator
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
  protocol.name: dubbo

consumer代碼

1 pom

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-dubbo</artifactId>
        <groupId>com.cxy</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>service-consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.cxy</groupId>
            <artifactId>service-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

2 controller

package com.cxy.controller;

import com.alibaba.dubbo.config.annotation.Reference;

import com.cxy.api.IProductService;
import com.cxy.bean.Product;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("sell")
public class SellController {

    // dubbo遠程引用注解
    @Reference(version = "1.0.0")
    private IProductService productService;

    @RequestMapping
    public String productList(Model model) {
        List<Product> products = productService.queryAllProducts();
        model.addAttribute("products", products);
        return "products";
    }

    @RequestMapping("product/{id}")
    public String productDetail(@PathVariable int id, Model model) {
        Product product = productService.queryProductById(id);
        model.addAttribute("product", product);
        return "product";
    }
}

3 啟動類:

package com.cxy;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo //開啟dubbo的注解支持
public class BootDubboConsumerApplication {

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

}

4 yml:

dubbo:
  application:
    name: boot-duboo-provider
  # 指定注冊協議和注冊地址  dubbo推薦使用zookeeper作為注冊中心,並且在start依賴中引入了zookeeper的java客戶端Curator
  registry:
    protocol: zookeeper
    address: 127.0.0.1:2181
  protocol.name: dubbo
  # 關閉所有服務的啟動時檢查 (沒有提供者時報錯)視實際情況設置
  consumer:
    check: false
server:
  port: 8090

5 freemark模板文件:

<!doctype html>
<html lang="en">
<head>
    <title>產品列表</title>
</head>
<body>
<h3>產品列表:點擊查看詳情</h3>
<ul>
    <#list products as product>
       <li>
           <a href="sell/product/${product.id}">${product.name}</a>
       </li>
    </#list>
</ul>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
    <title>產品詳情</title>
</head>
<body>
<ul>
    <li>產品名稱:${product.name}</li>
    <li>產品序列號:${product.id}</li>
    <li>是否貴重品:${product.isPrecious?string('','')}</li>
    <li>生產日期: ${product.dateInProduced?string("yyyy-MM-dd HH:mm:ss")}</li>
    <li>產品價格:${product.price}</li>
</ul>
</body>
</html>

點擊兩個啟動類:

訪問:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM