SpringBoot整合dubbo+zookeeper


GitHub—代码下载

使用maven多模块:
  创建一个SpringBoot父类项目----->dubbo-parent
  创建一个子模块----->dubbo-provider
  创建一个子模块----->dubbo-consumer

dubbo-provider 和 dubbo-consumer 继承 dubbo-parent
dubbo-consumer 又依赖于 dubbo-provider(consumer的pom文件添加了provider的依赖)

一、dubbo-parent(父类项目)

pom.xml(jar包版本没做详细整理)

<?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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.2.RELEASE</version>
		<relativePath/> 
	</parent>
	<groupId>com.yan</groupId>
	<artifactId>dubbo-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>	<!--父类项目中的打包方式为pom-->

	<modules>	<!--父类项目的两个子模块-->
		<module>dubbo-provider</module>
		<module>dubbo-consumer</module>
	</modules>

	<name>dubbo-parent</name>
	<description>Demo project for Spring Boot</description>

	<properties>	<!--properties标签中可以对父类中的jar包版本进行统一管理,也就是将下面的依赖版本version提取到此标签中进行统一管理-->
		<java.version>1.8</java.version>
	</properties>

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

		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.46</version>
		</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-logging</artifactId>
		</dependency>

		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.2.0</version>
		</dependency>

		<!-- 引入zookeeper的依赖,和服务器上的zookeeper版本对应 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.9</version>
		</dependency>
	</dependencies>
</project>

二、dubbo-provider(服务端)

启动类上添加开启dubbo注解@EnableDubbo

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>
	<parent>
		<groupId>com.yan</groupId>
		<artifactId>dubbo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.provider</groupId>
	<artifactId>dubbo-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>dubbo-provider</name>
	<description>Demo project for Spring Boot</description>

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

		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
		</dependency>

		<!-- 引入zookeeper的依赖,和服务器上的zookeeper版本对应 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>
	</dependencies>

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

</project>

application-dev.yml

server:
  port: 8082
dubbo:
  application:
    name: dubbo-provider
  registry:     #注册中心配置,用于配置连接注册中心相关信息
    address: zookeeper://127.0.0.1:2181
  protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
    name: dubbo
    port: 20880
  scan:         #扫描包
    base-packages: com.provider.service.impl

接口实现类:
@Service注解是dubbo注解,注意不要倒错包

package com.provider.service.impl;

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

import com.provider.entity.User;
import com.provider.mapper.UserMapper;
import com.provider.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Created by yan on 2019/2/15.
 */
@Service
@org.springframework.stereotype.Service
public class UserServiceImpl implements IUserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUser(int id) {

        return userMapper.getUser(id);
    }
}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.provider.mapper.UserMapper">
    <select id="getUser" resultType="user">
        select * from t_user where us_id = #{usId}
    </select>
</mapper>

User(注意:实体类实现Serializable,不然会报错)

package com.provider.entity;

import java.io.Serializable;

/**
 * Created by yan on 2019/2/15.
 */
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    private Integer usId;
    private String usName;
    private Integer usAge;
    //getter setter

三、dubbo-consumer(客户端)

启动类上添加开启dubbo注解@EnableDubbo

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>
	<parent>
		<groupId>com.yan</groupId>
		<artifactId>dubbo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.consumer</groupId>
	<artifactId>dubbo-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>dubbo-consumer</name>
	<description>Demo project for Spring Boot</description>

	<dependencies>
		<!--引入服dubbo-provider模块的依赖-->
		<dependency>
			<groupId>com.provider</groupId>
			<artifactId>dubbo-provider</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

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

		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
		</dependency>

		<!-- 引入zookeeper的依赖,和服务器上的zookeeper版本对应 -->
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>
	</dependencies>

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

application-dev.yml

server:
  port: 8083
dubbo:
  application:
    name: dubbo-consumer
  registry:     #注册中心配置,用于配置连接注册中心相关信息
    address: zookeeper://127.0.0.1:2181
  protocol:     #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
    name: dubbo
    port: 20880

controller.java

package com.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.provider.entity.User;
import com.provider.service.IUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created by yan on 2019/2/15.
 */
@Controller
public class UserController {
    @Reference
    private IUserService userService;

    @RequestMapping("getUser/{id}")
    @ResponseBody
    public User getUser(@PathVariable("id") int id){
        return userService.getUser(id);
    }
}

四、查看测试效果

先启动zookeeper,启动tomcat【端口号改成8081(您随意更改),因为zookeeper调用8080端口】
先启动dubbo-provider,再启动dubbo-consumer(注意启动先后顺序)
在这里插入图片描述
dubbo-admin上面可以看到 提供者数 和 消费者数,可通过包名+接口 查询所发布的服务
在这里插入图片描述

consumer调用provider接口

8083 是consumer子模块的端口号!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44030218/article/details/87385937