发表于: 2020-01-19 15:50:44

3 1251


啥也不说就是干!!

今天完成的事情:

1、将之前的发短信 Service 部署到两台 server 上

那么服务端需要暴露两个 Service 在不同的端口号上

@Resource
private SmsCodeSendService smsCodeSendService;

@Resource
private SmsCodeSendService smsCodeSendService2;

@Bean
public RmiServiceExporter getRmiServiceExporter() {
   RmiServiceExporter rmiServiceExporter = new RmiServiceExporter();
   rmiServiceExporter.setServiceName("smsCodeSendService");
   rmiServiceExporter.setService(smsCodeSendService);
   rmiServiceExporter.setServiceInterface(SmsCodeSendService.class);
   rmiServiceExporter.setRegistryPort(2002);
   return rmiServiceExporter;
}

@Bean
public RmiServiceExporter getRmiServiceExporter2() {
   RmiServiceExporter rmiServiceExporter2 = new RmiServiceExporter();
   rmiServiceExporter2.setServiceName("smsCodeSendService2");
   rmiServiceExporter2.setService(smsCodeSendService2);
   rmiServiceExporter2.setServiceInterface(SmsCodeSendService.class);
   rmiServiceExporter2.setRegistryPort(2003);
   return rmiServiceExporter2;
}

2、Rmi client 方需要更改为随机访问不同的 Service

@Bean(name = "smsCodeSendService")
public RmiProxyFactoryBean getUserService() {
   RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
   rmiProxyFactoryBean.setServiceUrl("rmi://f0t1.top:2002/smsCodeSendService");
   rmiProxyFactoryBean.setServiceInterface(SmsCodeSendService.class);
   return rmiProxyFactoryBean;
}

@Bean(name = "smsCodeSendService2")
public RmiProxyFactoryBean getUserService2() {
   RmiProxyFactoryBean rmiProxyFactoryBean = new RmiProxyFactoryBean();
   rmiProxyFactoryBean.setServiceUrl("rmi://f0t1.top:2003/smsCodeSendService");
   rmiProxyFactoryBean.setServiceInterface(SmsCodeSendService.class);
   return rmiProxyFactoryBean;
}

同时在调用方法时候也要随机调用这两个 Service,参考之前师兄的日志

@Override
public SmsInfo sendSMSCode(String phone) {

int flag = Math.random()>0.5? 1:0;

   SmsInfo smsInfo = null;

   try {
       switch(flag){
           case 1:
                smsInfo = smsCodeSendService.sendSMSLoginCode(phone);
                break;
           default:
                smsInfo = smsCodeSendService2.sendSMSLoginCode(phone);
                break;
       }

      }catch(Exception e){
          switch(flag){
               case 1:
                   smsInfo = smsCodeSendService2.sendSMSLoginCode(phone);
                   break;
               default:
                   smsInfo = smsCodeSendService.sendSMSLoginCode(phone);
                   break;
       }
   }
   return smsInfo;
}

3、在 Nginx 上做负载均衡


分别启动两台 tomat 测试

深度思考

1.部署两台Service,如何在WEB中随机访问任意一台Service?

用 Nginx 部署,直接请求Nginx 进行分发,并且在客户端调用时随机调用不同 Service 方法

2.RMI的简单介绍 
远程方法调用(Remote Method Invocation)
它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用
RMI系统由以下部分构成
1 远程服务接口定义
2 远程服务接口的具体实现
3 桩(Stub)和框架(Skeleton)文件
4 一个运行远程服务的服务器
5 一个RMI命名服务,允许客户端去发现这个远程服务
6 类文件的提供者(一个HTTP或者FTP服务器)

7 一个需要这个远程服务的客户端程序

3.什么是RMI,什么是RPC,两者之间的区别是什么?

RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。

4.Service和Service之间可以互相调用吗?是应该统一Controller调用Service,还是应该Service调用Service?
一个模块内是 controller调用service,但是如果有多个模块,需要用一个模块的 service调用 另外模块的 service
 
5.Service对外暴露的接口粒度应该是怎么样的,是只提供基础的CRUD服务,还是应该将业务逻辑包含进去? 

应该是包含了业务逻辑,这样不同的业务就能拆分到不同而模块去

6.Thrift,Protobuffer分别是什么,一般用于什么场景?

1)Thrift: 支持的语言更广泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php

    protobuf 目前还是只支持c++, java, python

2)Thrift提供的功能更丰富一些: Thrift提供了简单的RPC构架(其实不简单了, block, nonblock的都有了…..) 

    protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。

3)Thrift支持多种协议格式. Thrift的代码实现,有专门的TProtocol和TTransport抽象,相互配合,可以实现多种协议,方便集成各种传输方式。至少目前Thrift就能使用json作为序列化协议。 

protobuf只安心一种协议,并下决心把这个格式做好。输入输出也是标准的stream. 

4)thrift目前不支持Windows平台 

     protobuf没有这个问题,提供了visual studio的项目文件,可以很顺利的在windows平台下编译。

5)thrift侧重点是构建夸语言的可伸缩的服务,特点就是支持的语言多,同时提供了完整的rpc service framework,可以很方便的直接构建服务,不需要做太多其他的工作。

7.什么是序列化和反序列化,在RMI中是否要实现 Serializable 接口, serialVersionUID的用处是什么?
序列化:把Java对象转换为字节序列的过程
反序列化:把字节序列恢复为Java对象的过程
在用dubbo中有实现Serializable 接口,作为原创调控

serialVersionUID:固定此类id值,避免改变对应的类,id值变化无法进行连接

明天计划的事情:

开始任务9,学习 dubbo

遇到的问题:

随机访问 Sevice 没思路,是参考之前师兄的日志实现的,不知道有没有更优的解决方案




返回列表 返回列表
评论

    分享到