微服务实现

springboot+dubbo+zookeeper实现微服务

1、将基础服务打包发布到私服

基础服务的目录结构

deploy发布

2、创建微服务user包含子模块 user-provider和user-consumer

user(maven pom,稳定版本1.5.15,不选依赖,自己手动添加)

user-provider(maven project,稳定版本1.5.15,不选依赖,自己手动添加)

user-consumer(maven project,稳定版本1.5.15,不选依赖,自己手动添加)

目录结构如下

3.添加依赖,重点是需要在3个pom文件中配置<modules>和 <parent>标签 ,上下管理关系

user服务的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>

	<groupId>cn.bdqn</groupId>
	<artifactId>shop-user</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>shop-user</name>
	<description>Demo project for Spring Boot</description>
	<modules>
		<module>shop-user-provider</module>
		<module>shop-user-consumer</module>
	</modules>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.15.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>
		<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>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
			<version>2.12.0</version>
		</dependency>
		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>

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

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.7</version>
		</dependency>

		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-module</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-service</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-dao</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>


	</dependencies>

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

user-provider服务的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>

	<groupId>cn.bdqn</groupId>
	<artifactId>shop-user-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>shop-user-provider</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<artifactId>shop-user</artifactId>
		<groupId>cn.bdqn</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</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>
		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.7.3</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-dto</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-utils</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-service</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-dao</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>

	</dependencies>

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


</project>

user-consumer服务的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>

	<groupId>cn.bdqn</groupId>
	<artifactId>shop-user-consumer</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>shop-user-consumer</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<artifactId>shop-user</artifactId>
		<groupId>cn.bdqn</groupId>
		<version>0.0.1-SNAPSHOT</version>
	</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>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-dto</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>cn.bdqn</groupId>
			<artifactId>shop-common-utils</artifactId>
			<version>1.0-SNAPSHOT</version>
		</dependency>

	</dependencies>

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


</project>

4.配置文件

注意:dubbo配置的不同,一对服务(比如user-provider和user-consumer)的注册中心地址,调用协议地址都是一样的,

           应用名肯定是不同的

扫描二维码关注公众号,回复: 2599355 查看本文章

           并且server.port均各不相同

           2个XX-provider之间的注册中心一般相同,也可以不同,根据实际情况定,调用协议地址不一样,

user-provider配置文件application.yml

#mysql配置
spring:
   datasource:
     url: jdbc:mysql://192.168.219.128:3306/user_db
     username: root
     password: root
     driver-class-name: com.mysql.jdbc.Driver
   #redis配置
   redis:
     database: 0
     host: 192.168.219.128
     port: 6379
     password: 123456
     timeout: 3000
     pool:
       max-active: 8
       max-idle: 8
       max-wait: -1
       min-idle: 0
   #dubbo+zookeeper配置

   dubbo:
       # 应用名
       appname: spring-boot-starter-dubbo-user-provider
       # 注册中心地址
       registry: zookeeper://192.168.219.128:2181
       # 调用协议地址
       protocol: dubbo
       port: 20802


#mybatis配置扫包
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

#tomcat端口
server:
  port: 8092

user-consumer配置文件application.yml

#mysql
spring:
   datasource:
       driver-class-name: com.mysql.jdbc.Driver
       url: jdbc:mysql://192.168.219.128:3306/qg_user_db
       username: root
       password: root
   #redis数据配置
   redis:
       host: 192.168.219.128
       port: 6379
       database: 0
       password: 123456
       pool:
           # 连接池最大连接数(使用负值表示没有限制)
           max-active: 8
           # 连接池最大阻塞等待时间(使用负值表示没有限制)
           max-wait: -1
           # 连接池中的最大空闲连接
           max-idle: 8
           # 连接池中的最小空闲连接
           min-idle: 0
       timeout: 3000
   #dubbo+zookeeper
   dubbo:
      appname: spring-boot-starter-dubbo-user-consumer
      registry: zookeeper://192.168.219.128:2181
      protocol: dubbo
      port: 20802
#mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

#tomcat
server:
   port: 8082

5.代码实现

5.1provider提供服务

5.1.1provider提供服务service

特别注意注解@Service归属类 ,以及@Autowired(required = true) 调用的基础服务的bean 

package cn.bdqn.shopuserprovider.service;

import cn.bdqn.RpcQgUserService;
import cn.bdqn.common.EmptyUtils;
import cn.bdqn.common.RedisUtils;
import cn.bdqn.mapper.QgUserMapper;
import cn.bdqn.pojo.QgUser;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * 提供用户相关服务
 */
@Component
@Service(interfaceClass = RpcQgUserService.class)
public class RpcQgUserServiceImpl implements RpcQgUserService {

	@Autowired(required = true)
	private QgUserMapper qgUserMapper;
	@Autowired
	private RedisUtils redisUtils;

	/**
	 * 用户id查找用户
	 *
	 * @param id
	 * @return
	 * @throws Exception
	 */
	@Override
	public QgUser getQgUserById(String id) throws Exception {
        略。。。。
}

5.1.2主程序注解情况

@Import注解是解决RedisUtils注入失败配置的

package cn.bdqn.shopuserprovider;

import cn.bdqn.common.RedisUtils;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@EnableDubboConfiguration//dubbo注册配置
@MapperScan("cn.bdqn.mapper")//mapper扫包
@Import({RedisUtils.class})//注入bean失败,加入本注解
public class ShopUserProviderApplication {

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

5.2 consumer提供服务

5.2.1 consumer提供服务service

调用远程服务的注解@Reference

package cn.bdqn.shopuserconsumer.service;

import cn.bdqn.RpcQgTokenService;
import cn.bdqn.RpcQgUserService;
import cn.bdqn.common.Constants;
import cn.bdqn.common.RedisUtils;
import cn.bdqn.pojo.QgUser;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 *
 */
@Service
public class QgLoginServiceImpl implements QgLoginService {
	@Reference
	private RpcQgUserService rpcQgUserService;
	@Reference
	private RpcQgTokenService rpcQgTokenService;
	@Autowired
	private RedisUtils redisUtils;


	@Override
	public QgUser login(String phone, String password) throws Exception {
        略。。。。。
    }
}

5.2.2主程序注解情况

同provider一样 , @Import注解是解决RedisUtils注入失败配置的

5.2.3controller编写

package cn.bdqn.shopuserconsumer.controller;

import cn.bdqn.common.*;
import cn.bdqn.pojo.QgUser;
import cn.bdqn.shopuserconsumer.service.QgLoginService;
import cn.bdqn.vo.TokenVO;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Calendar;

/**
 *
 */
@RestController
@RequestMapping("user")
public class LoginController {

	@Resource
	private QgLoginService qgLoginService;
//	@Resource
//	private RedisUtils redisUtils;

	@RequestMapping(value = "/login",method = RequestMethod.POST)
	public Dto doLogin(@RequestParam String username, @RequestParam String password,
	                   HttpServletRequest request) {
		// 用户名和密码有空,直接返回错误
    }
}

6 . 增加服务goods时,goods-provider的application.yml文件的配置

注意调用地址和server.port的改变

#mysql
spring:
   datasource:
     url: jdbc:mysql://192.168.219.128:3306/qg_goods_db
     username: root
     password: root
     driver-class-name: com.mysql.jdbc.Driver
   #redis
   redis:
     database: 0
     host: 192.168.219.128
     port: 6379
     password: 123456
     timeout: 3000
     pool:
       max-active: 8
       max-idle: 8
       max-wait: -1
       min-idle: 0
   #dubbo+zookeeper

   dubbo:
       # 应用名称
       appname: spring-boot-starter-dubbo-goods-provider
       # 注册中心地址
       registry: zookeeper://192.168.219.128:2181
       #
       protocol: dubbo
       port: 20803


#mybatis\
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

#tomcat\u7AEF\u53E3
server:
  port: 8093
#mysql
spring:
   datasource:
       driver-class-name: com.mysql.jdbc.Driver
       url: jdbc:mysql://192.168.219.128:3306/qg_goods_db
       username: root
       password: root
   #redis
   redis:
       host: 192.168.219.128
       port: 6379
       database: 0
       password: 123456
       pool:
           max-active: 8
           max-wait: -1
           max-idle: 8
           min-idle: 0
       timeout: 3000
   #dubbo+zookeeper
   dubbo:
      appname: spring-boot-starter-dubbo-goods-consumer
      registry: zookeeper://192.168.219.128:2181
      protocol: dubbo
      port: 20803
#mybatis
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml

#tomcat\uFFFD\uFFFD\uFFFD\uFFFD
server:
   port: 8083

猜你喜欢

转载自blog.csdn.net/qq_42237676/article/details/81413949
今日推荐