资讯专栏INFORMATION COLUMN

Lagom参考指南(三)

lemanli / 2165人阅读

摘要:针对您的个人需要,有一些设置和任务可用来调整服务器,让我们来探索它们默认端口号默认情况下,服务器在端口上启动。

开发环境下运行Lagom
1.开发环境

Lagom的sbt或者maven项目是可以基于开发的环境允许使用单个命令来运行任意数量的服务。
当代码更改时,同样的命令也会重新加载服务,这样你就不用手动重启了,您可以继续关注您的工作,并让Lagom进行编译和重新加载。
(1)运行Maven中的所有服务
命令很简单,就是 lagom:runAll
如果您有很多服务,或者第一次检索依赖关系,这可能需要一段时间,
(2)热加载
一旦“Services started”消息出现,如果您对源代码进行更改,您将在控制台看到这样的输出:
[info] Compiling 1 Java source to //target/scala-2.11/classes...
--- (RELOAD) ---
(3)我们所看到的背后
当我们运行了runAll命令之后,在背后到底都发生了什么呢??
    >启动了一个嵌入式服务定位器(特别类似于zk或者eureka)
    >启动了一个Cassandra服务器
    >开始了kafka服务器(这个比较热了,mq系列)
    >你的服务开始
        >并向服务定位器注册
这一切都是在没有特殊代码或附加配置的情况下自动发生的。
您可以通过在web浏览器中查看http://localhost:8000 / services来验证您的服务正在运行(或者使用像curl这样的命令行工具),服务定位器,在端口8000上运行,江湖返回类似于如下这样的信息:
    [{"name":"hello-stream","url":"http://0.0.0.0:26230"},
     {"name":"cas_native","url":"tcp://127.0.0.1:4000/cas_native"},
     {"name":"hello","url":"http://0.0.0.0:24266"}]
cas_native是Cassandra服务器,正如您将在编写持久和集群服务的文档中学习的,Cassandra是Lagom的默认数据库,它是开发环境的一个组成部分。
服务为定位器,Cassandra和kafka在接下来的章节中详细讨论。

2.运行服务

就像在上节讲的那样,在构建中定义的所有Lagom服务都可以用单个任务来运行:runAll。执行此任务时,将启动嵌入式服务定位器,一个内嵌的 Cassandra服务器也会随之启动,然后你的所有的服务都会并行的被启动起来。而且,所有启动的服务都将以热重载模式运行。热重新加载意味着服务会自动地重新加载您所做的每一个更改,这样您就不必手动重新启动它们。大多数时候,runAll任务将为您提供良好的服务。然而,有时您可能想手动启动一些服务,这是当run 任务将派上用场的时候。run任务对每个Lagom服务实现项目都可用。
在Maven中,您可以使用Maven项目列表标记来执行特定服务的run任务:
    $ mvn -pl  lagom:run
您应该记住的一点是,run只启动特定的服务,它既不启动服务定位器,也不启动Cassandra服务器。因此,在手动启动服务之前,您可能需要手动启动服务定位器和Cassandra服务器。

3.端口是如何分配给服务的

在检查运行服务列表时,您可能想知道端口是如何分配的。您应该注意到的一点是,端口的分配是一致的,这意味着每个服务将得到分配的相同端口,这是真正有用的,它允许我们来编写测试服务功能的测试脚本,甚至可以与与团队的其他成员共享创建的脚本。即使在不同的机器上,同样的端口也会被确定地选择!注意,这里提醒一下,不是说所有服务使用一个端口,而是lagom使用算法,期间用到了项目名,也就是说,同一个项目。不管啥时候,它端口都是唯一的,算法导致的。
为每个服务分配一个端口的算法如下:
    >这个项目的名称是散列的。
    >哈希绝对值被投影到端口范围(默认的端口范围是[49152,65535])
    >如果没有其他项目声明相同的端口,则指定的端口分配给项目。如果两个或多个项目被投影到同一个端口上,相互冲突的项目是按字母顺序排列的,首先出现的项目将得到分配给它的预期端口。然而,余下的项目将得到最接近的(严格的)可用的临近的端口。
    总之,你不需要去担心这个,与大多数情况一样,端口范围宽到足以使冲突不可能发生。然而,有时您可能仍然倾向于将特定的端口分配给服务(例如,如果自动分配的端口已经在您的系统中使用)您可以手动为项目的服务端口设置提供端口号。
    在Maven中,您可以通过修改服务实现pom配置来实现这一点:
        
            com.lightbend.lagom
            lagom-maven-plugin
            
                11000
            
        
    上文中的算法的描述,在默认端口中,默认端口是[49152,65535]。这也称为短暂的端口范围,IANA为动态端口选择使用了一系列的端口号。如果默认范围不适合您,您可以通过在构建中添加以下内容来更改它。
    pom文件中加入:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                
                    40000
                    45000
                
            
        
    在此更改之后,您的服务项目将被分配到一个范围[40000,45000],但是需要注意的是,我们的端口范围的小,带来的是两个服务碰巧是分配同一个端口的可能性就大了。这本身并不是问题(只要所有项目都有足够的端口),但是,在您的构建中添加一个新的服务项目可能会导致对已分配到现有服务项目的端口的更改,如果这两个项目都发生相同的端口。如果您不希望这种情况发生,请确保提供的端口范围足够宽。或者,手动为服务项目分配端口,因为这是有意义的。
    

4.服务定位器(就类似于zk和eureka)

服务定位器嵌入在Lagom的开发环境中,允许服务发现并相互通信。有一些设置和任务可以为您喜欢的嵌入式服务定位器调整,让我们来探索它们:
(1)默认的端口号
在Lagon中,服务发现的端口号默认的是8000,但是这个端口是非常容易被其他的应用所占用的。或者,您可以通过在构建中添加以下内容来告诉服务定位器在10000端口上运行。
在总项目下的pom文件里配置:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            10000
        
    
(2)与外部的服务进交互
可以在您的构建中定义的Lagom服务和无限数量的外部服务(可以在本地运行或在另一台机器上运行)之间进行通信。您要做的第一件事是在服务定位器中注册每个外部服务。假设我们想要注册一个名为weather的外部服务,它运行在http://localhost:3333中,下面是我们要添加到构建的内容。
在总项目下的pom文件里配置:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            
                http://localhost:3333
            
        
    
上面的内容确保服务定位器知道天气服务。然后,如果您需要一个Lagom服务来与它进行通信,只需将ServiceLocator进行@inject,并使用它来定位weather服务的URI,或者使用它执行一些任意的工作。
(3)与外部的Lagom项目集成
请注意,如果您想要与之通信的服务实际上是一个Lagom服务,那么您可能想要阅读有关与外部Lagom项目集成的文档(就是Lagom参考指南(二)的第二节)。
(4)启动与停止
当执行runAll任务时,服务定位器会自动启动。然而,有时您可能想手动启动一些服务,因此您不会使用runAll任务。这种情况下,您可以通过maven命令行lagon:startServiceLocator手动启动服务定位器,或者是使用lagom:stopServiceLocator来停掉服务注册中心。
(5)让服务定位失效
您可以通过在构建中添加以下内容来禁用嵌入式服务定位器。
在maven项目根路径下的pom文件:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            false
        
    
注意,通过禁用服务定位器,您的服务将无法进行通信。恢复通信,您必须在您的服务中提供ServiceLocator的实现。

5.Cassandra Server

默认情况下,需要保存数据的Lagom服务需要使用Cassandra作为数据库。为了方便起见,我们在开发环境中嵌入了一个Cassandra服务器,这样您就不必担心安装它了。针对您的个人需要,有一些设置和任务可用来调整Cassandra服务器,让我们来探索它们:
(1)默认端口号
默认情况下,Cassandra服务器在端口4000上启动。我们知道Cassandra 通常在端口9042上运行,这正是我们选择不同端口的原因:如果你碰巧有一个的话,我们不想干扰本地运行的Cassandra 。如果当前的默认端口不适合您,例如您希望在端口9042上运行嵌入的Cassandra服务器,那么您可以通过在构建中添加以下内容来实现。
在meven的pom中配置:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            9042
        
    
 (2)启动时候进行清理:
     默认情况下,运行服务创建的所有数据库文件将在下一次启动Cassandra服务器时删除。您可以通过在构建中添加以下内容来关闭这个特性
    还是在maven的pom文件里:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
            
                false
            
        
    (3)秘钥空间(弃用)
    在Cassandra中的一个keyspace就代表一个名称空间,它定义节点上的数据复制。每个服务应该使用一个惟一的keyspace名称,这样不同服务的表就不会互相冲突。在开发环境中,默认情况下,keyspace将自动设置为项目的名称(在可能替换了一些不允许的字符之后)。如果生成的密钥空间不适合您,您可以提供自定义的密钥空间。
    在Maven中,您可以通过修改服务实现的pom配置来做到这一点:
        
            com.lightbend.lagom
            lagom-maven-plugin
            
                true
                users
            
        
    值得指出的是,尽管上面有一个Cassandra密钥空间,在运行您的服务时仍然需要提供。因此,如果您想提供可以在开发和生产中使用的Cassandra keyspace名称,建议通过配置文件这样做。
    例如:替代掉使用lagomCassandraKeyspace向我们之前那样使用那样来设置秘钥空间,而我们可以通过在项目的application.conf中添加以下附加的键/值来获得相同的结果(注意,如果没有这个文件,那么你就得手动创建一个,放在/src/main/resources/中),内容如下:
        cassandra-journal.keyspace=users
        cassandra-snapshot-store.keyspace=users
        lagom.persistence.read-side.cassandra.keyspace=users
    项目会使用我们在配置文件application.conf中配置的,而不是使用我们在pom中学的。因此,重写构建中的keyspace是不赞成的,并且将在后面的Lagom版本中删除。
    有关配置keyspace的更多信息,请参见Cassandra持久实体配置(原文叫 Cassandra persistent entity configuration)。
(4)JVM选项
    Cassandra服务器在一个多带带的进程上运行,而JVM则是由合理的内存默认启动的。但是,如果默认的JVM选项不适合您,您可以通过在构建中添加以下内容来覆盖它们。
    在maven父目录的pom文件里写:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                
                     -Xms256m
                     -Xmx1024m
                     -Dcassandra.jmx.local.port=4099
                     -DCassandraLauncher.configResource=dev-embedded-cassandra.yaml
                 
            
        
    (5)yaml 配置文件
    如上所示,可以通过修改Cassandra JVM选项来配置YAML配置文件,其中包括一个-DCassandraLauncher.configResource系统属性的值来指向src/main/resource下的某个文件。
    (6)日志
    日志记录是这样配置的,它可以达到标准输出,例如org.apache.cassandra设置为ERROR,下面是logback的设置。
        
        
          
            
              %date{ISO8601} %-5level %logger - %msg%n
            
          
                    
          
            
                       
        
       单数需要注意的是,内嵌的Cassandra服务器是不允许你修改上面的这个配置文件。如果确实你想自定义自己的日志,那么只能自己安装Cassandra服务器,并阅读相关的配置介绍(就是下面的第10个小点)进行自定义。
   (7)Cassandra开始时间
       如前所述,runAll会在启动其他服务之前启动一个内嵌的Cassandra服务器,而且服务通常只在Cassandra服务器可到达之后才开始。默认情况下,Cassandra服务器将在20秒内启动并运行,但是您可以通过在构建中添加以下内容来更改这个默认值。
       在maven的pon文件下:
       plugin>
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                0
            
        
        设置Cassandra的最大启动等待时间为0可以模拟真实的部署场景,因为运行的Cassandra实例可能无法在服务启动时可用
    (8)关闭和启动
        在执行runAll任务时,将自动启动Cassandra服务器。在执行runAll任务时,将自动启动Cassandra服务器。在这种情况下,你可以手动的启动Cassandra 服务。如果是maven任务,你可以使用lagom:startCassandra来启动Cassandra 任务,用lagom:stopCassandra 来关闭任务。
    (9)让Cassandra  Disabled
        你可以通过添加如下的配置来让内嵌的Cassandra  失效。
        maven的pom文件里:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                false
            
        
        如果您需要您的服务连接到一个外部运行的、本地运行的Cassandra实例,那么上面的这些配置可以帮助你。
    (10)连接到本地运行的Cassandra实例
        可以连接到外部运行的Cassandra实例来代替嵌入的Cassandra实例。您所需要做的就是在构建中添加以下内容。
        maven的pom文件中:
        
            com.lightbend.lagom
            lagom-maven-plugin
            ${lagom.version}
            
                
                    http://localhost:9042
                
                false
            
        
        这两个设置只能在运行Lagom的DevMode时使用。这两个设置的目的是禁用嵌入式Cassandra服务器,并在DevMode中配置服务定位器,以便在寻找cas_native时仍然能够找到Cassandra。如果您已经有一个运行在本地或公司基础设施中的Cassandra服务器,您可能想要禁用它。在这种情况下,Lagom启动Cassandra服务器是没有意义的,而且您还会获得几秒钟的启动时间。
        这些示例中的服务定位器设置假设您的本地Cassandra实例在端口9042上运行。
    

6.kafka服务器

默认情况下,Lagom服务需要使用Kafka作为消息代理与其他人之间共享信息的。在微服务体系结构中,使用message broker对避免耦合服务过于强烈是至关重要的。因此,为了方便,我们在开发环境中嵌入了kafka服务器,这样您就不必担心安装它了。有一些设置和任务可以调整kafka服务器,让我们来探索它们:
(1)默认端口:
    默认情况下,kafka服务器默认的端口号是9092,kafka使用zk,因此一个zk服务器也在2181端口被启动起来,如果当前的默认端口不适合您,您可以通过在构建中添加以下内容来更改
    在maven的pom文件下:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            10000
            9999
        
    
 (2)kafka properties文件
     kafka服务器可配置属性文件。默认的,我们使用server.properties文件来为kafka提供配置,只有一个更改,允许在服务器上创建主题的自动创建。这是一个很好的默认快速启动,但是如果你发现自己需要用不同的配置来启动kafka,用下面的方式,你可以很容易的做到。
     maven的pom文件:
     
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            ${basedir}/kafka-server.properties
        
    
(3)JVM优化
    kafka服务器在一个多带带的进程上运行,并且JVM开始时具有合理的内存默认值。但是,如果默认的JVM选项不适合您,您可以通过在构建中添加以下内容来覆盖它们。
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            
                 -Xms256m
                 -Xmx1024m
             
        
    
(4)日志
    将日志配置为只用于文件。您可以在文件夹中找到kafka的日志,文件目录的格式为:
    /target/lagom-dynamic-projects/lagom-internal-meta-project-kafka/target/log4j_output
(5)Commit log
    kafka本质上是一个持久的提交日志。您可以发现kafka在文件夹中保存的所有数据。
    /target/lagom-dynamic-projects/lagom-internal-meta-project-kafka/target/logs
(6)Start and stop
    kafka服务器在runAll命令的古时候是会自动启动的。然而,有时你想手动的启动几个服务,不想手动runAlll,这种情况下,不可以通过命令来启动kafka服务器,maven项目就是用lagom:startKafka,关闭的话就用lagom:stopKafka
(7)让kafka失效
    您可以通过在构建中添加以下内容来禁用嵌入式Kafka服务器。
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            false
        
    
    禁用嵌入式Kafka服务器的一个很好的理由是,如果您需要您的服务连接到一个外部的Kafka实例。
(8)连接到外部kafka服务器
    可以连接到外部的Kafka服务器来代替嵌入的服务器。您所需要做的就是在构建中添加以下内容。
    maven的pom文件:
    
        com.lightbend.lagom
        lagom-maven-plugin
        ${lagom.version}
        
            localhost:10000
            false
        
    
    您可能已经注意到,上面配置的kafka服务器实际上在本地运行(请注意提供地址中的本地主机)。在这种情况下,它实际上已经足够配置正在运行的端口,而不必提供完整的地址。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70073.html

相关文章

  • Lagom参考指南

    摘要:有一些设置和任务可以为您喜欢的嵌入式服务定位器调整,让我们来探索它们默认的端口号在中,服务发现的端口号默认的是但是这个端口是非常容易被其他的应用所占用的。 开发环境下运行Lagom1.开发环境 Lagom的sbt或者maven项目是可以基于开发的环境允许使用单个命令来运行任意数量的服务。 当代码更改时,同样的命令也会重新加载服务,这样你就不用手动重启了,您可以继续关注您的工作,并让La...

    VishKozus 评论0 收藏0
  • Lagom参考指南(二)

    摘要:允许将反序列化为没有附加注释元数据不可变的类。包的库经常会想支持多个版本的这样做需要构建一个为每个版本的支持工件它介绍了如何区分这些工件的问题看到像不支持添加额外的元数据依赖关系的想法来指定他们需要什么版本的。 1.Defining a Lagom build(定义一个Lagom构建) 正如在Lagom构建哲学中已经讨论过的那样,使用Lagom,您可以自由地将所有服务组合在一个单独的构...

    import. 评论0 收藏0
  • 微服务框架lagom

    摘要:在这种情况下,每一个微服务定义一个限界上下文,类似于领域驱动的限界上下文。设计你的微服务系统的响应式微服务架构这本书对于微服务系统架构很有帮助。 1.Lagom概念介绍 lagom框架包含一系列的可以支持我们从开发到部署的库以及开发环境: >在开发阶段,可以通过一个简单的命令构建我们的项目,启动所有你的服务,并且可以支持所有的lagom基础设置层。当你修改了代码,logom是有热加载的...

    Michael_Lin 评论0 收藏0
  • 前端资源系列(4)-前端学习资源分享&前端面试资源汇总

    摘要:特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 特意对前端学习资源做一个汇总,方便自己学习查阅参考,和好友们共同进步。 本以为自己收藏的站点多,可以很快搞定,没想到一入汇总深似海。还有很多不足&遗漏的地方,欢迎补充。有错误的地方,还请斧正... 托管: welcome to git,欢迎交流,感谢star 有好友反应和斧正,会及时更新,平时业务工作时也会不定期更...

    princekin 评论0 收藏0
  • Bytom矿池接入协议指南

    摘要:比原项目仓库地址地址矿机配置固件升级两个都要刷先后顺序没关系升级时间较长,升级期间请勿断电配置节点测试时可以考虑切换到分支降低难度使挖矿也能出块,或初始化启动时可以加上指定数据目录,若目录不存在则会自动新建该目录流程初始化节点先建 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/Byto...

    CoffeX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<