Как предоставить dubbo сервисы в play framework для scala
Мы используем Play Framework 2.7 для scala разработки нашего бэкэнд-проекта, нам нужно предоставить некоторую службу дублирования, например:
class UserService @Inject()(
userDao: UserDao
) extends NJUserService {
def updateUserProfile(uid: String, avatar: String) = {
userDao.updateAvatar(uid, avatar).map { result =>
...
}
}
}
но dubbo использует рефлекс для создания экземпляра UserService, поэтому он не может правильно обрабатывать @Inject.
Я экспортировал службу dubbo ref https://dubbo.apache.org/docs/v2.7/user/quick-start/#service-provider Кажется, игра с помощью Google Guice для реализации инъекции, но она не поддерживается dubbo, любым есть хорошее решение, я очень признателен.
при запуске игровой платформы исключение, например:
Error injecting constructor, org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserService' defined in class path resource [dubbo-provider.xml]: Instantiation of bean failed;
dubbo-provider.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="kb_api"/>
<dubbo:registry protocol="zookeeper" address="#{systemProperties['dubbo.zookeeper']}"/>
<!-- use dubbo protocol to export service on port 20880 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- service implementation, as same as regular local bean -->
<bean id="userNJService" class="com.test.kb.services.UserService"></bean>
<!-- declare the service interface to be exported -->
<dubbo:service interface="com.test.common.service.UserService" ref="userNJService"/>
</beans>
код экспортной услуги:
val context = new ClassPathXmlApplicationContext("dubbo-provider.xml")
context.start()