zoukankan      html  css  js  c++  java
  • 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>

    点击两个启动类:

    访问:

  • 相关阅读:
    关于C++名字空间
    选择组合OR继承?
    编译器为C++ 空类自动生成的成员函数
    函数返回值为引用类型
    关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
    ADO.NET 安全编码指南 来自MSDN
    ADO.NET中调用存储过程
    视图
    高效使用连接的模式
    GROUP BY, HAVING, COMPUTE, ORDER BY 语句
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/10337412.html
Copyright © 2011-2022 走看看