Как предоставить 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()

0 ответов

Другие вопросы по тегам