2017-02-16 55 views
1

我正在創建lagom簡單應用程序,定義一個休息終點並使用休息客戶端郵遞員命中終點。但作爲迴應,我得到了,行動沒有發現錯誤。我與lagom整合阿卡,以下是我的代碼:Lightbend Lagom和Akka:無法命中lagom服務的其餘端點

服務:

trait TwitterSchedulerService extends Service { 

    def doWork: ServiceCall[NotUsed, Done] 

    override def descriptor: Descriptor = { 
    import Service._ 
    named("scheduler").withCalls(
     call(doWork) 
    ) 
    } 
} 

ServiceImpl

class TwitterSchedulerServiceImpl(system: ActorSystem) extends TwitterSchedulerService { 

    override def doWork = ServiceCall { _ => 
    Future { 
     println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ") 
     Done 
    } 
    } 
} 

加載程序配置:

class TwitterLoader extends LagomApplicationLoader { 

    override def load(context: LagomApplicationContext): LagomApplication = 
    new TwitterApplication(context) { 
     override def serviceLocator = NoServiceLocator 
    } 

} 

object TwitterSerializerRegistry extends JsonSerializerRegistry { 

    override val serializers = Vector(
    JsonSerializer[String] 
) 
} 

abstract class TwitterApplication(context: LagomApplicationContext) extends LagomApplication(context) 
    with CassandraPersistenceComponents with AhcWSComponents { 

    override lazy val lagomServer = LagomServer.forServices(
    bindService[TwitterSchedulerService].to(wire[TwitterSchedulerServiceImpl]) 
) 
    override lazy val jsonSerializerRegistry = TwitterSerializerRegistry 
} 

我在關注lagom文檔http://www.lagomframework.com/documentation/1.3.x/scala/Akka.html。我想知道,爲什麼會發生這個錯誤,事件的所有休息點都已定義?

+0

Hi @ harmeet-singh-taara,你可以發佈錯誤消息和你用來測試你的代碼的'curl'命令嗎? – ignasi35

+0

當然,'GET請求http:// localhost:9000/doWork'。 @ ignasi35我正在使用郵遞員,並且未找到404響應。 –

+0

當我使用'GET請求與http:// localhost:57211/doWork'網址。我的請求過程很好。但還是不明白,爲什麼'9000'文章不工作? –

回答

4

您的服務在http://localhost:57211

http://localhost:9000運行運行充當反向代理都在你的項目中運行的服務的服務網關服務器。

服務網關可以配置爲將服務調用轉發到您的服務上,但默認情況下不會。您可以通過在服務描述符中定義ACL(訪問控制列表)來配置它。

最常見的,你會打電話給withAutoAcl(true)自動轉發所有的服務調用路徑爲您服務:

trait TwitterSchedulerService extends Service { 

    def doWork: ServiceCall[NotUsed, Done] 

    override def descriptor: Descriptor = { 
    import Service._ 
    named("scheduler").withCalls(
     call(doWork) 
    ).withAutoAcl(true) 
    } 
} 

如果你想更好地控制哪些路徑獲得來自服務網關轉發到後端服務,你可以調用withAcls傳遞明確的方法和路徑正則表達式的列表應該從服務網關轉發:

trait TwitterSchedulerService extends Service { 

    def doWork: ServiceCall[NotUsed, Done] 

    override def descriptor: Descriptor = { 
    import Service._ 
    named("scheduler").withCalls(
     call(doWork) 
    ).withAcls(
     ServiceAcl.forPathRegex("/doWork") 
    ) 
    } 
} 

如果部署到ConductR(在Lightbend生產套件的一部分),在se服務描述符中的ACL配置也用於生成ConductR ACL configuration