后端开发 \ SpringBoot \ SpringBoot学习-(二十八)SpringBoot整合Dubbo

SpringBoot学习-(二十八)SpringBoot整合Dubbo

总点击50
简介:基本步骤 创建接口api 创建服务提供方 创建服务消费者 创建接口api 基本步骤: 创建一个maven项目

基本步骤

创建接口api

创建服务提供方

创建服务消费者

创建接口api

基本步骤:

创建一个maven项目

修改pom.xml文件

新增接口

创建一个maven项目

配置pom.xml文件

<?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>

<groupId>com.ahut</groupId>

<artifactId>demo-api</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>demo-api</name>

<description>demo-api</description>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

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

</properties>

<build>

<!-- 新增配置 -->

<!-- 添加默认的全局,不然会打包失败 -->

<defaultGoal>compile</defaultGoal>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

创建com.ahut.service包,创建DemoService接口,代码如下:

package com.ahut.service;

/**

* @author cheng

* @interfaceName: DemoService

* @description: 用于演示的业务逻辑接口

* @dateTime 2018/5/14 15:46

*/

public interface DemoService {

/**

* @description: 演示接口

* @author cheng

* @dateTime 2018/5/14 15:49

*/

void sayHello(String name);

}

发布项目到maven本地仓库

创建服务提供方

基本步骤:

创建一个springboot项目

在pom.xml中添加依赖

新增接口api的实现

新增dubbo的配置

配置application.properties

修改程序主入口

创建一个spring boot项目

在pom.xml中新增以下依赖:

<?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>

<groupId>com.ahut</groupId>

<artifactId>demo-producer</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>demo-producer</name>

<description>demo-producer</description>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.13.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

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

</properties>

<dependencies>

<!-- 引入接口api -->

<dependency>

<groupId>com.ahut</groupId>

<artifactId>demo-api</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

<!-- 引入dubbo,去除其中的spring依赖,否则会报错,版本不对 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.6.1</version>

<exclusions>

<exclusion>

<groupId>org.springframework</groupId>

<artifactId>spring</artifactId>

</exclusion>

</exclusions>

</dependency>

<!-- 引入zookeeper,去除其中的log4j,否则会因为日志原因导致堆栈溢出 -->

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.11</version>

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</exclusion>

</exclusions>

</dependency>

<!-- 缺少的jar -->

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-recipes</artifactId>

<version>4.0.1</version>

</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>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

创建com.ahut.serviceImpl包,创建DemoServiceImpl实现DemoService接口,代码如下:

package com.ahut.serviceImpl;

import com.ahut.service.DemoService;

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

/**

* @author cheng

* @className: DemoServiceImpl

* @description:

* @dateTime 2018/5/14 16:05

*/

// 注意这里的@Service注解使用的是dubbo的com.alibaba.dubbo.config.annotation.Service

// 相当于

// <bean id="demoService" class="com.ahut.serviceImpl.DemoServiceImpl"/>

// <dubbo:service interface="com.ahut.service.DemoService" ref="demoService"/>

@Service

public class DemoServiceImpl implements DemoService {

@Override

public void sayHello(String name) {

System.out.println("hello," + name);

}

}

创建com.ahut.config包,创建DubboConfig配置dubbo:

package com.ahut.config;

import com.alibaba.dubbo.config.ApplicationConfig;

import com.alibaba.dubbo.config.ProtocolConfig;

import com.alibaba.dubbo.config.RegistryConfig;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* @author cheng

* @className: DubboConfig

* @description: dubbo配置

* @dateTime 2018/5/15 9:32

*/

@Configuration

public class DubboConfig {

// 相当于<dubbo:application name="demo-producer"/>

@Bean

public ApplicationConfig createApplicationConfig() {

ApplicationConfig applicationConfig = new ApplicationConfig();

applicationConfig.setName("demo-producer");

return applicationConfig;

}

// 相当于<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

@Bean

public RegistryConfig createRegistryConfig() {

RegistryConfig registryConfig = new RegistryConfig();

registryConfig.setAddress("zookeeper://127.0.0.1:2181");

return registryConfig;

}

// 相当于<dubbo:protocol name="dubbo" port="20880"/>

@Bean

public ProtocolConfig createProtocolConfig() {

ProtocolConfig protocolConfig = new ProtocolConfig();

protocolConfig.setName("dubbo");

protocolConfig.setPort(20880);

return protocolConfig;

}

}

配置application.properties

# 修改服务器端口

server.port=8100

修改程序启动类:

package com.ahut;

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

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

// 扫描需要提供服务的基础包

@DubboComponentScan(basePackages = {"com.action.serviceImpl"})

public class DemoProducerApplication {

public static void main(String[] args) {

SpringApplication.run(DemoProducerApplication.class,args);

System.out.println("dubbo服务者启动");

}

}

创建服务消费者

基本步骤:

创建一个springboot项目

在pom.xml中添加依赖

调用接口api

新增dubbo的配置

配置application.properties

修改程序主入口

创建一个spring boot项目

在pom.xml中新增以下依赖:

<?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>

<groupId>com.ahut</groupId>

<artifactId>demo-consumer</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>demo-consumer</name>

<description>demo-consumer</description>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.5.13.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

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

</properties>

<dependencies>

<!-- 引入接口api -->

<dependency>

<groupId>com.ahut</groupId>

<artifactId>demo-api</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

<!-- 引入dubbo,去除其中的spring依赖,否则会报错,版本不对 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.6.1</version>

<exclusions>

<exclusion>

<groupId>org.springframework</groupId>

<artifactId>spring</artifactId>

</exclusion>

</exclusions>

</dependency>

<!-- 引入zookeeper,去除其中的log4j,否则会因为日志原因导致堆栈溢出 -->

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.11</version>

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</exclusion>

</exclusions>

</dependency>

<!-- 缺少的jar -->

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-recipes</artifactId>

<version>4.0.1</version>

</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>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

创建com.ahut.action包,创建DemoAction

package com.ahut.action;

import com.ahut.service.DemoService;

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

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

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

/**

* @author cheng

* @className: DemoAction

* @description:

* @dateTime 2018/5/14 16:26

*/

@RestController

@RequestMapping(value = "/demo")

public class DemoAction {

// dubbo的注解

// 相当于<dubbo:reference interface="com.ahut.service.DemoService" id="demoService"/>

@Reference

private DemoService demoService;

@RequestMapping(value = "/say")

public String sayHello(String name) {

demoService.sayHello(name);

return "dubbo消费者调用服务者成功";

}

}

创建配置文件:

package com.ahut.config;

import com.alibaba.dubbo.config.ApplicationConfig;

import com.alibaba.dubbo.config.RegistryConfig;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* @author cheng

* @className: DubboConfig

* @description: dubbo 配置

* @dateTime 2018/5/15 10:09

*/

@Configuration

public class DubboConfig {

// 相当于<dubbo:application name="demo-consumer"/>

@Bean

public ApplicationConfig createApplicationConfig() {

ApplicationConfig applicationConfig = new ApplicationConfig();

applicationConfig.setName("demo-consumer");

return applicationConfig;

}

// 相当于<dubbo:registry address="zookeeper://127.0.0.1:2181"/>

@Bean

public RegistryConfig createRegistryConfig() {

RegistryConfig registryConfig = new RegistryConfig();

registryConfig.setAddress("zookeeper://127.0.0.1:2181");

return registryConfig;

}

}

配置application.properties

# 修改程序端口

server.port=8110

修改程序主入口:

package com.ahut;

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

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

// 扫描消费者所在包

@DubboComponentScan(basePackages = {"com.ahut.action"})

public class DemoConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(DemoConsumerApplication.class,args);

System.out.println("dubbo消费者启动");

}

}

运行

打开zookeeper

启动服务提供者

启动服务消费者

通过idea的zookeeper插件可以看到如下结果:

SpringBoot学习-(二十八)SpringBoot整合Dubbo

在浏览器地址栏输入:http://localhost:8110/demo/say?name=demo

SpringBoot学习-(二十八)SpringBoot整合Dubbo

问题

如果出现服务提供者启动,服务无法注册到zookeeper时,在服务提供者上面添加@Component注解

package com.ahut.serviceImpl;

import com.ahut.service.DemoService;

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

import org.springframework.stereotype.Component;

/**

* @author cheng

* @className: DemoServiceImpl

* @description:

* @dateTime 2018/5/14 16:05

*/

@Service(timeout = 5000)

@Component

public class DemoServiceImpl implements DemoService {

@Override

public void sayHello(String name) {

System.out.println("hello," + name);

}

}

意见反馈 常见问题 官方微信 返回顶部