Dubbo小计及基于dubbo的Oauth2.0统一认证平台
 2018-12-18 16:55:45   318   0   

本文最后更新于天前,文中介绍内容及环境可能已不适用.请谨慎参考.

😅说来惭愧,刚开始接触dubbo还是从打车项目开始,差不多半年前的事情。

 

之前虽然多少听说过有这种技术,但是总是觉得事不关己高高挂起,

反正也没用到呢,也没需求,完全没有主动去了解的意愿,

大抵我就是一个Lazy模式的开发者吧 - -!

 

我总是认为,这些开发的东西,不用,或者用不起来,即使学了,很快也会忘记的。

好吧,既然用到了,那没办法,不得不了解学习下了呢.

 

既然学了,那就记录一下吧.

Dubbo基础

简介

 

Dubbo背景

随着互联网的发展,网站应用的规模不断扩大,访问量及用户量的不断增加,对应用系统的要求会不断的增加。

一般的发展如下:

单一应用架构 (All In One,比如本站点>.<)

--> 垂直应用架构(将应用按功能拆分成各负责一块的独立应用)

--> 分布式服务架构(各个独立应用继续拆分成相对独立的核心服务)

-->流动计算架构(增加对各个分布式集群服务的调度,哪里压力大,就集中资源给那里,动态负载等)

简单说就是这样:

把功能独立的一块service独立提出来,可以独立部署及使用。

比如账号相关的服务,独立出来后,所有其他项目都可以访问这里的账号相关服务,而不用每个项目都来一遍.

 

类似于公共项目的引用,只不过这里不需要去引用jar包或者啥,

而是每个独立出去的服务都会把自己在一个统一的地方(注册中心)登记下,

而我们引用的时候只需要直接从统一的地方(注册中心)获取一下就好了。

 

Dubbo使用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入

无缝接入。

 

官方示例下载

git clone https://github.com/apache/incubator-dubbo.git

cd incubator-dubbo 运行 dubbo-demo-provider中的org.apache.dubbo.demo.provider.Provider 

如果使用Intellij Idea 请加上-Djava.net.preferIPv4Stack=true

直接git clone看代码.

 

provider简单示例

服务service提供方注册。单个项目

 

使用zookeeper作为注册中心.即所有的服务提供,消费方都从zookeeper上或许目录信息。

pom.xml引入dubbo,zookeeper等.

 

	<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.8</version>
		</dependency>

 

spring 普通service配置

public interface UserService 
{
}

...

@Service("userService")
public class UserServiceImpl  implements UserService
{
}

application-context.xml中引入dubbo配置,

<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:task="http://www.springframework.org/schema/task"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

...

<import resource="classpath:spring/dubbo-provider.xml" />


</beans>

 

spring-dubbo.xml

dubbo申明,暴露userService服务. 把服务登记到zookpeer中.

<?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="account-provider-front"/>

    <dubbo:registry protocol="zookeeper" address="@zookeeper.server@" id="fmsmanager-server"/>
   
    <dubbo:protocol name="dubbo" port="30801" dispatcher="all" threadpool="fixed" accepts="500" threads="100"/>
   
    <dubbo:provider delay="-1" payload="1200000000" timeout="1000000" retries="0"/>

    <dubbo:service interface="com.kxjl.account.provider.front.service.UserService" ref="userService"/>



</beans>




 

启动spring

public static void main(String[] args) throws Exception {

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring/application-context.xml"});
        context.start();
     
        synchronized (AccountProviderFrontStartupService.class)
        {
            while (true)
                try
                {
                	AccountProviderFrontStartupService.class.wait();
                }
                catch (Throwable e) {
                    e.printStackTrace();
                }
        }
}

 

comsumer服务使用方

另外的需要使用dubbo服务的项目.

spring-dubbo.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="account-web-front" />

	<dubbo:registry protocol="zookeeper" id="my"  address="@zookeeper.server@"   />

	<!-- 生成远程服务代理,可以和本地bean一样使用 service -->
	<dubbo:reference id="userService" interface="com.kxjl.account.provider.front.service.UserService" check="false" registry="my"/>
	
 </beans>

	

其中注册与使用时,interface名称需要保持一致.

 

使用跟普通bean一样。

@Controller
@RequestMapping("/user")
public class UserCommonController {

    @Autowired
    private UserService userService;

 .....

}

 

说白了,就是把service分散开了。

 

统一认证中心架构

前面使用dubbo处理了几个项目,感觉良好,

刚好这段时间又需要做一个统一认证平台,就完全没有理由不用它嘛。

整体架构

 

吸取了点前面项目的教训,把公用的bean,mapper都独立出来了。作为独立jar包引入。

区分开前台开发中心,后台管理中心,和oauth认证中心.

 

bean-mapper

所有的bean,mapper都在这里处理,省去了每个provider里面都搞一遍的麻烦及命令冲突啥的。

但是这个项目打包的配置需要修改一下.

需要把对于的mapper.xml文件引入jar,不然后面部署会找不到文件.

<build>
		<finalName>account-provider-oauth</finalName>
		<resources>
		
			<resource>
				<targetPath>${project.build.directory}/classes</targetPath>
				<directory>src/main/resources</directory>
			 	<filtering>true</filtering> 
				<includes>
					<include>**/*.xml</include>
					<include>**/*.properties</include>
					
				</includes>
			</resource>

...

</build>

 

provider

这里面就简单了,就是各种的service实现。

front-provider

oauth-provider

web

再就是WEB了 ,web可以自由的引用各个provider,互相没有耦合,各自独立。

 

部署

web独立部署, 前台/后台管理/认证相互独立。

这里前台和oauth认证是共享session的,具体参考本站文章 spring-session应用配置及分布式应用session共享|同站点跨应用session共享

provider独立部署.

 

最后就是是效果啦

 

 

 

 


 2019-01-03 23:03:38 
 0

  本文基于CC BY-NC-ND 4.0 许可协议发布,作者:野生的喵喵 固定链接: 【Dubbo小计及基于dubbo的Oauth2.0统一认证平台】 转载请注明



发表新的评论
{{s_uid}}   , 欢迎回来.
您的称呼(*必填):
您的邮箱地址(*必填,您的邮箱地址不会公开,仅作为有回复后的消息通知手段):
您的站点地址(选填):
留言:

∑( ° △ °|||)︴

(๑•̀ㅂ•́)و✧
<( ̄) ̄)>
[]~( ̄▽ ̄)~*
( ̄ˇ ̄)
[]~( ̄▽ ̄)~*
( ̄ˇ ̄)
╮( ̄▽ ̄)╭
( ̄ε(# ̄)
(⊙ˍ⊙)
( ̄▽ ̄)~*
∑( ° △ °|||)︴

文章分类

可能喜欢 

KxのBook@Copyright 2017- All Rights Reserved
Designed and themed by 野生的喵喵   1621045   44900