从零开始搭建一套微服务框架(三)搭建项目框架

调用中心有了,现在开始搭建项目框架。

一、工程结构

我这里采用gradle,项目分为3块,api,interface,service。

api主要是对外暴露restful接口,并调用provider,引用interface

interface的内容是service的接口和实体,用于RPC调用

service是微服务主体,注册到dubbo供consumer消费,也引用interface

另外,项目用到的一些通用工具和配置,我们提取到common项目,连接数据库的配置,我们提取到jdbc项目

结构如下图

二、依赖

目前先考虑微服务调用相关,我们需要spring-boot-starter-web,dubbo-spring-boot-starter,zkclient,另外还有一些常用的用到再加,我把依赖提取了一个gradle文件,内容如下:

ext {
  springboot= "1.5.10.RELEASE"
  libs = [
          springboot: [
                    "org.springframework.boot:spring-boot-starter-web:${springboot}",
          ],
          dubbo:[
          	"com.alibaba.spring.boot:dubbo-spring-boot-starter:2.0.0",
          	"com.101tec:zkclient:0.9"
          ],
          commons: [
      			  "redis.clients:jedis:3.0.0",
  				  "com.alibaba:fastjson:1.2.4",
				  "com.alibaba:druid:1.0.30",
				  "dom4j:dom4j:1.6.1",
				  "ch.qos.logback:logback-classic:1.2.3",
				  "ch.qos.logback:logback-core:1.2.3",
				    
				  "com.sun.mail:mailapi:1.6.0",
				  "com.sun.mail:smtp:1.6.0",
				    
				  "mysql:mysql-connector-java:5.1.39",
				    
				  "cn.easyproject:ojdbc7:12.1.0.2.0",
				    
				  "org.formcept:sqljdbc42:4.2",
				  "net.sourceforge.jtds:jtds:1.3.1",
				    
				  "org.slf4j:slf4j-api:1.7.13",
				    
				  "cn.afterturn:easypoi-base:3.0.3",
				  "cn.afterturn:easypoi-web:3.0.3",
				  "cn.afterturn:easypoi-annotation:3.0.3",
				    
          ]
  ]
}

三、编写provider

1.添加application.properties,填入内容

#provider name
dubbo.application.name=ktp-auth-provider
#package to scan dubbo service
dubbo.scan.base-packages=cn.ktp.auth.service

dubbo.protocol.name=dubbo
#use -1 to allow dubbo regeist a random port
dubbo.protocol.port=-1

#Dubbo Registry Address
dubbo.registry.address=zookeeper://10.8.80.232:2181?backup=10.8.80.232:2182,10.8.80.232:2183

(我的eclipse没安装properties插件,写中文会被转码,这些中式英文注释将就看吧……)

2.编写启动类

package cn.ktp.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

@EnableDubbo
@SpringBootApplication
public class KtpAuthProvider {
	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(KtpAuthProvider.class);
        app.setWebEnvironment(false); 
        
        // 运行
        app.run(args); 
        com.alibaba.dubbo.container.Main.main(args);
	}
}

@EnableDubbo用于自动加载dubbo配置

因为provider并不对外暴露http接口,所以我这里设置不启用web环境,这样就可以不配置端口,但是当dubbo注册完成之后就直接结束进程了,为了解决这个加了一句com.alibaba.dubbo.container.Main.main(args);

3.编写接口

在interface项目中编写一个接口,暴露一个hello方法

package cn.ktp.auth.iservice;

public interface IAuthService {
	public String hello();
}

4.编写服务,注意这里的Service注解是dubbo的,后面如果需要使用spring其他特性,还需要加上Spring的Service注解

package cn.ktp.auth.service;


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

import cn.ktp.auth.iservice.IAuthService;

@Service
public class AuthService implements IAuthService{

	@Override
	public String hello() {
		return "hello1";
	}
	
}

至此,provider就已经搞定,运行KtpAuthProvider,登陆dubboAdmin可以看到已经注册成功

四、编写Consumer,即api项目

1.添加application.properties,填入内容

server.port=7002
dubbo.application.name=ktp-auth-consumer
dubbo.scan.base-packages=cn.ktp.auth.api
dubbo.registry.address=zookeeper://10.8.80.232:2181?backup=10.8.80.232:2182,10.8.80.232:2183

这里只需要应用名,扫描包名和注册中心地址

2.编写启动类

package cn.ktp.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

@EnableDubbo
@EnableAutoConfiguration
@SpringBootApplication
public class KtpAuthConsumer {

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

直接启动springboot就行,注意还是要加上@EnableDubbo

3.编写api

package cn.ktp.auth.api;

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

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

import cn.ktp.auth.iservice.IAuthService;

@RestController
@RequestMapping(value = "ktp/api/auth")
public class KtpAuthApi {
	
	@Reference
	private IAuthService authService;
	
	@RequestMapping(value="hello")
	public String hello() {
		return authService.hello();
	}
}

调用Service跟原来spring的注入方式是一样的,注意这里的@Reference是dubbo提供的

4.启动KtpAuthConsumer,在浏览器输入http://localhost:7002/ktp/api/auth/hello

调用成功! 

项目已经上传至https://gitee.com/krisdevhome/ktp-main

后续会逐步完善其他功能

猜你喜欢

转载自blog.csdn.net/kris1122/article/details/88311015