利其器-SOA

面向服务的架构
它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
大体上分为
  • 表现层
    • 表现层调用
  • 服务层
    • 各个服务子系统
面向服务的框架有利于
  • 分布式开发
    • 需要按照功能点把系统拆分,拆分成独立的功能。单独为某一个节点添加服务器。需要系统之间配合才能完成整个业务逻辑。叫做分布式。
    • 涉及到的技术 dubbo zookeeper
  • 集群
    • 同一个工程部署到多台服务器上。
    • 涉及到的技术 nginx
分布式
建立在网络之上的软件系统不同的服务发布在不同的服务器上,通过中间桥梁dubbo +zookeeper 进行系统间通信。减少服务强的负担,从而增加并发处理能力;使得系统之间松耦合。
  • 各个子系统之间如何通信
    • dubbo
      • 服务提供方
      • 服务消费
    • 步骤
      • 导包
        • 因为dubbo 中添加了spring 的包所以在添加的时候会与之前添加的冲突,所以要排除一下
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>

  • 服务提供方
    • 在maven 中添加上面的依赖
    • 将要提供的服务,暴露在一定的端口(最好一个服务中的提供所有接口使用一个端口)
      • 服务之间最好通过接口来调用,这样扩展性好。
      • 在spring 配置文件中加入如下代码
        • protocol :连接的注册中心是zookeeper (dubbo 推荐的)
          • 会在后面说到 zookeeper
        • interface :暴露的接口,其他的服务消费者练到注册中心以后就可以看见这个接口,并调用它
        • ref :这个接口的具体实现
        • timeout :是调用这个接口的超时时间,如果死在这个接口里面了,妨碍其他的消费者。所以有个超时时间默认是1秒,但是在开发调试的时候肯定不止一秒。所以根据debug 的时长自行调节
<dubbo:application name="springtest-admin" />
<dubbo:registry protocol="zookeeper"
address="127.0.0.1:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20883" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.v5.springtest.service.test" ref="testImple" timeout="600000"/>
  • 服务消费者
    • 这里只需要指出我要引用的接口就可以了
<dubbo:application name="springtest-web" />
<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
<!-- 由于 interface 被web 依赖 所以可以直接用这个 接口 -->
<dubbo:reference interface="com.v5.springtest.service.test" id="test" />
测试
暴露接口的具体实现类 中的一个方法 testImple 是根据spring 包扫描自动管理的
public TbItem getTbItemByKey(Long id) {
// TODO Auto-generated method stub
TbItem tbItem = new TbItem();
tbItem.setTitle("son of god");
return tbItem;
}
消费者 通过spring 自动注入接口的实现对象,并调用方法。

@Autowired
test t;
@RequestMapping("/index/{id}")
@ResponseBody
public TbItem getbyid(@PathVariable Long id){
TbItem tt= t.getTbItemByKey(id);
String d=tt.getTitle();
String de=tt.getNum()+"";
return tt;
}
将两个工程运行起来,浏览器中输入 http://localhost:8082/index/536563 (根据自己配置)


这就ok 了
Zookeeper
zookeeper 桥接了消费者和提供者,这里它只是一个 服务强 ,只需要将zookeeper 的包 导入即可。然后安装一个zookeeper 服务器。这里直接装在本机了。
单机版
直接修改zoo_sample.cfg文件改名为zoo.cfg ok 执行bin 下的 zkServer 启动(开发的时候使用)
集群版
直接修改zoo_sample.cfg文件改名为zoo.cfg
在data 目录下创建一个myid
写入 服务器之间的名字 有机台服务器 一般按照顺序编号
在zoo.cfg 中配置
server.id =ip:port
id 就是myid 中配置的id
这个就是告诉每台zookeeper 一共有几台服务器,你们通过这个ip 和这个端口,可以内部通信,选出leader.


注意:真正开发的时候多用配置文件dubbo.properties 来配置服务器的ip,prot ,以上为了简单直观。
后端开发一般不需要域名,内部怎么通信的于用户无关。要域名的一般都是前端 门户,让用户好记。

注意:由于调用服务是远程的所以返回的结果要进行远程传输,如果返回的是对象要实现序列化接口 implements serializable

dubbo的monitor
是dubbo写好的一个后台管理war 包导入到tomcat webapps 下就可以了

    可以查看有那些提供服务,和哪些消费者


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值