1. Подготовка окружающей среды
1. Установите zookeeper в среде докера
# ##安装zookeeper
# docker pull zookeeper
# ##启动zookeeper
# docker run --name zookeeper-01 --restart always -d -p 2181:2181 zookeeper
# ##部署dubbo-admin服务监控平台
# ## 下载dubbo-admin-2.6.0.war包,并在docker环境下部署tomcat容器
# docker pull tomcat
# ## 从docker hub 拉取Tomcat,并将打好的war包上传之宿主机器一个目录下如:/home/dubbo-admin-2.6.0.war
# ## 启动tomcat,并用浏览器访问http://host_path:8080查看tomcat启动情况,记得将dubbo-admin配置文件中的zk ip 修改为zk容器的ip而不是宿主机器的ip(天坑)
# ## 查看docker 容器ip
# docker inspect 364c77111927| grep IPAddress
# docker run -it --name dubbo-admin -d --rm -p 8080:8080 tomcat
# ## 进入docker容器中,并查看tomcat容器路径
# docker exec -i -t <docker_name> bash
# ## 将宿主机器的war包复制到docker容器中:
#从主机复制到容器
sudo docker cp host_path(宿主机器路径) containerID:container_path(容器路径)
# ## 从容器复制到主机
# docker cp containerID:container_path host_path
# ## 例如:复制及自动部署完成之后访问dubbo-admin服务管理平台http://host_path:8080/dubbo-admin-2.6.0
# docker cp /home/dubbo-admin-2.6.0.war 603140acbd3c:/usr/local/tomcat/webapps
# ## 镜像打包 否则下次启动还需重新部署
docker commit -m "message" -a "author" ${CONTAINER_ID} ${NEW_IMAGE_NAME}
Во-вторых, конфигурация проекта
Конфигурация сервера
1. Добавьте зависимости dubbo в файл pom
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
</dependency>
2. конфигурация application.properties
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.wxx.demo.dubbo
Адрес и порт, настроенные ZK здесь, являются ZK, созданными вышеописанной машиной. Если у вас есть собственный ZK, вы можете изменить следующую конфигурацию. Конфигурация объясняется следующим образом:
spring.dubbo.application.name имя приложения
spring.dubbo.registry.address адрес реестра
spring.dubbo.protocol.name имя протокола
Порт протокола spring.dubbo.protocol.port
spring.dubbo.scan Каталог пакетов класса обслуживания dubbo
3. Код поставщика услуг
@Component//将该服务纳入spring容器中
@Service(version = "1.0.0")//使用dubbo提供的service注解,通过version提供版本号
public class MallOrderServiceImpl implements MallOrderService {
@Autowired
private MallOrderMapper orderMapper;
@Override
public MallOrder getOrderById(String orderId) {
return orderMapper.selectByPrimaryKey(orderId);
}
@Override
public Integer saveOrder(MallOrder order) {
return orderMapper.insert(order);
}
}
4. Сущность MallOrder должна реализовать интерфейс сериализации
Конфигурация клиента
1. Добавьте зависимости, как указано выше.
2. конфигурация application.properties
## 避免和 server 工程端口冲突
server.port=8081
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.wxx.demo.dubbo
3. Потребительский код
@Component
public class DubboConsumerService {
@Reference(version = "1.0.0")//@Reference(version = “1.0.0”) 通过该注解,订阅该接口版本为 1.0.0 的 Dubbo 服务。
MallOrderService mallOrderService ;
public void printCity() {
String orderId="TD106986521";
MallOrder order = mallOrderService .getOrderById(orderId);
System.out.println(order .toString());
}
}
Суммируйте ямы, на которые наступили
1. Используйте разработку аннотаций dubbo, обязательно обратите внимание на использование
spring.dubbo.scan=com.wxx.demo.dubbo//扫描服务实现的包,否则注册不到服务
2. dubbo-admin не видит зарегистрированные сервисы.Помимо штатной настройки группы в интернете проверьте, есть ли в журнале запуска dubbo-admin сообщение об ошибке таймаута соединения zk.Для решения таких проблем установите период таймаута соединения zk , а затем dubbo- Настраивает ли файл конфигурации администратора ip контейнера zk вместо ip хост-машины