基于springboot搭建dubbo框架(注解和xml配置两种方式)

来源:互联网 发布:部队网络安全教育 编辑:程序博客网 时间:2024/06/05 14:18

一.基于SpringBoot的xml开发

1.新建maven工程

新建三个maven工程(工程名字是现在项目的名称随便命名的)

1> 服务提供者

  • - dubbo-provider
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- config
  •             DubboConfig.java
  •         |- service.impl
  •             ProductServiceImpl.java
  •             DubboProviderApplication.java
  • |- src/main/resources
  •     |- dubbo
  •         dubbo-provider.xml
  •         dubbo.properties
  •     application.yml
  •     bootstrap.yml
代码内容:
com.huawei.hicloud.config.DubboConfig.java
package com.huawei.hicloud.config;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.ImportResource;import org.springframework.context.annotation.PropertySource;@Configuration@PropertySource("classpath:dubbo/dubbo.properties")@ImportResource({ "classpath:dubbo/*.xml" })public class DubboConfig {}
com.huawei.hicloud.service.impl.ProductServiceImpl.java
package com.huawei.hicloud.service.impl;import org.springframework.stereotype.Service;import com.huaewi.hicloud.pojo.Product;import com.huaewi.hicloud.service.ProductService;@Servicepublic class ProductServiceImpl implements ProductService {@Overridepublic Product findById(String id) {Product product = new Product();product.setId(id);product.setBrand("HUAWEI");product.setCategory("TEL");product.setName("Honor V10");product.setPrice(2699d);return product;}}
com.huawei.hicloud.DubboProviderApplication.java
package com.huawei.hicloud;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DubboProviderApplication implements CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger(DubboProviderApplication.class);public static void main(String[] args) {logger.info("### DubboProviderApplication starter ...");SpringApplication.run(DubboProviderApplication.class, args);}@Overridepublic void run(String... arg0) throws Exception {logger.info("### Dubbo provider start ok!");}}
/dubbo-provider/src/main/resources/application.yml
server:   port: 8080
/dubbo-provider/src/main/resources/bootstrap.yml
none
/dubbo-provider/src/main/resources/dubbo/dubbo-provider.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="${dubbo.application.name}" /><!-- 注册中心暴露服务地址 --><!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> --><!-- <dubbo:registry protocol="zookeeper" address="10.170.219.98:2181,10.173.55.173:2181" />--><dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" /><!-- 暴露服务 --><dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" /><dubbo:service interface="com.chengli.springboot.example.service.ExampleService"ref="exampleServiceImpl" retries="0" timeout="6000" /></beans>
/dubbo-provider/src/main/resources/dubbo/dubbo.properties
#\u5E94\u7528\u540D\u79F0dubbo.application.name=dubbo-provider#\u6CE8\u518C\u4E2D\u5FC3\u7C7B\u578Bdubbo.registry.protocol=zookeeper#\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740dubbo.registry.address=127.0.0.1:2181#\u66B4\u9732\u670D\u52A1\u65B9\u5F0Fdubbo.protocol.name=dubbo#\u66B4\u9732\u670D\u52A1\u7AEF\u53E3dubbo.protocol.port=20880
pom文件
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-provider</artifactId>  <version>0.0.1-SNAPSHOT</version>    <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>  </dependency>  <dependency>  <groupId>com.alibaba</groupId>  <artifactId>dubbo</artifactId>  <version>2.5.3</version>  <exclusions>  <exclusion>  <groupId>org.springframework</groupId>  <artifactId>spring</artifactId>  </exclusion>  </exclusions>  </dependency>  <dependency>  <groupId>org.apache.zookeeper</groupId>  <artifactId>zookeeper</artifactId>  <version>3.4.7</version>  <type>pom</type>  </dependency>  <dependency>  <groupId>com.github.sgroschupf</groupId>  <artifactId>zkclient</artifactId>  <version>0.1</version>  </dependency>  <dependency>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>  </dependency>  </dependencies>    <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <configuration>  <source>1.8</source>  <target>1.8</target>  </configuration>  </plugin>  </plugins>  </build></project>

2> 服务消费者

  • - dubbo-consumer
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- config
  •             DubboConfig.java
  •         |- controller
  •             ProductController.java
  •         DubboConsumerApplication.java
  • |- src/main/resources
  •     |- dubbo
  •         dubbo-consumer.xml
  •         dubbo.properties
  •     application.yml
  •     bootstrap.yml
文件内容:
com.huawei.hicloud.config.DubboConfig.java
package com.huawei.hicloud.config;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.ImportResource;import org.springframework.context.annotation.PropertySource;@Configuration@PropertySource("classpath:dubbo/dubbo.properties")@ImportResource({ "classpath:dubbo/*.xml" })public class DubboConfig {}
com.huawei.hicloud.controller.ProductController.java
package com.huawei.hicloud.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import com.huaewi.hicloud.pojo.Product;import com.huaewi.hicloud.service.ProductService;@RestControllerpublic class ProductController {@Autowiredprivate ProductService productService;@RequestMapping(value="/products/{id}", method=RequestMethod.GET)public Product findById(@PathVariable(value="id") String id) {Product product = productService.findById("10001");return product;}}
com.huawei.hicloud.DubboConsumerApplication.java
package com.huawei.hicloud;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DubboConsumerApplication {private static final Logger logger = LoggerFactory.getLogger(DubboConsumerApplication.class);public static void main(String[] args) {logger.info("### DubboProviderApplication starter ...");SpringApplication.run(DubboConsumerApplication.class, args);}}

/dubbo-consume/src/main/resources/dubbo/dubbo-consumer.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="${dubbo.application.name}" /><!-- 注册中心暴露服务地址 --><dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" /><dubbo:reference id="productService" interface="com.huaewi.hicloud.service.ProductService" /></beans>
/dubbo-consume/src/main/resources/dubbo/dubbo.properties
#\u5E94\u7528\u540D\u79F0dubbo.application.name=dubbo-consumer#\u6CE8\u518C\u4E2D\u5FC3\u7C7B\u578Bdubbo.registry.protocol=zookeeper#\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740dubbo.registry.address=127.0.0.1:2181
/dubbo-consume/src/main/resources/application.yml
server:   port: 8081
/dubbo-consume/src/main/resources/bootstrap.yml
none
pom文件:
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-consume</artifactId>  <version>0.0.1-SNAPSHOT</version>    <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>  </dependency>  <dependency>  <groupId>com.alibaba</groupId>  <artifactId>dubbo</artifactId>  <version>2.5.3</version>  <exclusions>  <exclusion>  <groupId>org.springframework</groupId>  <artifactId>spring</artifactId>  </exclusion>  </exclusions>  </dependency>  <dependency>  <groupId>org.apache.zookeeper</groupId>  <artifactId>zookeeper</artifactId>  <version>3.4.7</version>  <type>pom</type>  </dependency>  <dependency>  <groupId>com.github.sgroschupf</groupId>  <artifactId>zkclient</artifactId>  <version>0.1</version>  </dependency>  <dependency>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>  </dependency>    </dependencies>    <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <configuration>  <source>1.8</source>  <target>1.8</target>  </configuration>  </plugin>  </plugins>  </build>  </project>

3> api存放接口和pojo

  • - dubbo-service-api
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- pojo
  •             Product.java
  •         |- service
  •             ProductService.java
com.huaewi.hicloud.pojo.Product.java
package com.huaewi.hicloud.pojo;import java.io.Serializable;public class Product implements Serializable {private static final long serialVersionUID = -7442539232954496779L;private String id;private String name;private Double price;private String category;private String brand;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}@Overridepublic String toString() {return "Product [id=" + id + ", name=" + name + ", price=" + price + ", category=" + category + ", brand="+ brand + "]";}}
com.huaewi.hicloud.service.ProductService.java

package com.huaewi.hicloud.service;import com.huaewi.hicloud.pojo.Product;public interface ProductService {public Product findById(String id);}
pom文件:
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>    <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <configuration>  <source>1.8</source>  <target>1.8</target>  </configuration>  </plugin>  </plugins>  </build></project>

2.本地启动zookeeper

3.启动provider和consumer应用

访问http://localhost:8081/products/10001
浏览器返回
{"id": "10001","name": "Honor V10","price": 2699.0,"category": "TEL","brand": "HUAWEI"}

二.基于SpringBoot的注解开发

新建三个maven工程(工程名字是现在项目的名称随便命名的)

1> 服务提供者

  • - boot-dubbo-provider
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- service.impl
  •             ProductServiceImpl.java
  •         BootDubboProviderApplication.java
  • |- src/main/resources
  •     application.yml
  •     bootstrap.yml
代码内容:
com.huawei.hicloud.service.impl.ProductServiceImpl
package com.huawei.hicloud.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.huaewi.hicloud.pojo.Product;import com.huaewi.hicloud.service.ProductService;@Service(version="1.0.0")public class ProductServiceImpl implements ProductService {@Overridepublic Product findById(String id) {Product product = new Product();product.setId(id);product.setBrand("HUAWEI");product.setCategory("TEL");product.setName("Honor V10");product.setPrice(2499d);return product;}}

com.huawei.hicloud.BootDubboProviderApplication
package com.huawei.hicloud;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class BootDubboProviderApplication implements CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger(BootDubboProviderApplication.class);public static void main(String[] args) {logger.info("### Spring boot DubboProviderApplication starter ...");SpringApplication.run(BootDubboProviderApplication.class, args);}@Overridepublic void run(String... arg0) throws Exception {logger.info("### Spring boot Dubbo provider start ok!");}}

/boot-dubbo-provider/src/main/resources/application.yml

server:   port: 8080spring:   dubbo:     application:       name: boot-dubbo-provider    registry:       address: zookeeper://127.0.0.1:2181    protocol:       name: dubbo      port: 20880    scan:       com.huawei.hicloud.service.impl  
/boot-dubbo-provider/src/main/resources/bootstrap.yml
none

pom
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>boot-dubbo-provider</artifactId>  <version>0.0.1-SNAPSHOT</version>    <dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>  <groupId>io.dubbo.springboot</groupId>  <artifactId>spring-boot-starter-dubbo</artifactId>  <version>1.0.0</version>  </dependency>  <dependency>  <groupId>com.huawei.hicloud</groupId>  <artifactId>boot-dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>  </dependency>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  </dependency>  </dependencies>  <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>3.7.0</version><!--$NO-MVN-MAN-VER$-->  <configuration>  <target>1.8</target>  <source>1.8</source>  </configuration>  </plugin>  </plugins>  </build></project>

2> 服务消费者

  • - boot-dubbo-consumer
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- controller
  •             ProductController.java
  •         BootDubboConsumerApplication.java
  • |- src/main/resources
  •     application.yml
  •     bootstrap.yml
代码内容:
com.huawei.hicloud.controller.ProductController

package com.huawei.hicloud.controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import com.alibaba.dubbo.config.annotation.Reference;import com.huaewi.hicloud.pojo.Product;import com.huaewi.hicloud.service.ProductService;@RestControllerpublic class ProductController {@Reference(version="1.0.0")private ProductService productService;@RequestMapping(value="/products/{id}", method=RequestMethod.GET)public Product findById(@PathVariable(value="id") String id) {Product product = productService.findById("10001");return product;}}

com.huawei.hicloud.BootDubboConsumerApplication
package com.huawei.hicloud;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class BootDubboConsumerApplication {private static final Logger logger = LoggerFactory.getLogger(BootDubboConsumerApplication.class);public static void main(String[] args) {logger.info("### Spring boot DubboProviderApplication starter ...");SpringApplication.run(BootDubboConsumerApplication.class, args);}}

/boot-dubbo-consumer/src/main/resources/application.yml
server:   port: 8081  spring:   dubbo:     application:       name: boot-dubbo-consumer    registry:       address: zookeeper://127.0.0.1:2181    protocol:       name: dubbo      port: 20880    scan:       com.huawei.hicloud

/boot-dubbo-consumer/src/main/resources/bootstrap.yml
none
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>boot-dubbo-consumer</artifactId>  <version>0.0.1-SNAPSHOT</version>    <dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  <dependency>  <groupId>io.dubbo.springboot</groupId>  <artifactId>spring-boot-starter-dubbo</artifactId>  <version>1.0.0</version>  </dependency>  <dependency>  <groupId>com.huawei.hicloud</groupId>  <artifactId>boot-dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>  </dependency>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  </dependency>  </dependencies>    <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <configuration>  <target>1.8</target>  <source>1.8</source>  </configuration>  </plugin>  </plugins>  </build></project>

3> api存放接口和pojo

  • - boot-dubbo-service-api
  • |- src/main/java
  •     |- com.huawei.hicloud
  •         |- pojo
  •             Product.java
  •         |- service
  •             ProductService.java
com.huaewi.hicloud.pojo.Product.java
package com.huaewi.hicloud.pojo;import java.io.Serializable;public class Product implements Serializable {private static final long serialVersionUID = -7442539232954496779L;private String id;private String name;private Double price;private String category;private String brand;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}@Overridepublic String toString() {return "Product [id=" + id + ", name=" + name + ", price=" + price + ", category=" + category + ", brand="+ brand + "]";}}
com.huaewi.hicloud.service.ProductService.java

package com.huaewi.hicloud.service;import com.huaewi.hicloud.pojo.Product;public interface ProductService {public Product findById(String id);}
pom文件:
<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>  <parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.2.RELEASE</version>  </parent>  <groupId>com.huawei.hicloud</groupId>  <artifactId>dubbo-service-api</artifactId>  <version>0.0.1-SNAPSHOT</version>    <build>  <plugins>  <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>  </plugin>  <plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <configuration>  <source>1.8</source>  <target>1.8</target>  </configuration>  </plugin>  </plugins>  </build></project>

2.本地启动zookeeper

3.启动provider和consumer应用

访问http://localhost:8081/products/10001
浏览器返回
{"id": "10001","name": "Honor V10","price": 2699.0,"category": "TEL","brand": "HUAWEI"}

注意: 
第一个xml方式中引入dubbo一定要排除spring依赖,否则启动失败

阅读全文
0 0