Java реализует построение распределенного проекта

Архитектура ZooKeeper Dubbo maven

1 Распределенный

1.1 Что распространяется

  1. Распределенная система должна быть системой, состоящей из нескольких узлов. Среди них узел относится к компьютерному серверу, и эти узлы, как правило, не изолированы, а связаны между собой.
  2. Наши узлы развернуты на этих подключенных узлах, и взаимные операции будут координироваться. Для пользователей распределенных систем они сталкиваются с сервером, который предоставляет услуги, которые нужны пользователям.На самом деле эти услуги представляют собой распределенную систему, состоящую из множества серверов за ними, поэтому распределенная система выглядит как суперкомпьютеры.

1.2 Разница между распределенным и кластерным

  1. Кластер — это когда одна и та же система расположена на разных серверах, например, система входа находится на разных серверах.
  2. Распределенная заключается в том, что разные системы расположены на разных серверах, и серверы звонят друг другу.

Раньше в маленьком ресторанчике был только один повар, который нарезал и мыл овощи, готовил и готовил все овощи. Позже было слишком много гостей, а повар на кухне был слишком занят, поэтому был нанят еще один повар.Оба повара могли готовить одни и те же блюда.Отношения между двумя поварами были кластером. Чтобы позволить шеф-повару сосредоточиться на приготовлении пищи и приготовить блюда по максимуму, мы наняли помощника, который будет отвечать за нарезку, подготовку и приготовление овощей.Отношения между шеф-поваром и помощником распределены, и даже Побочный повар слишком занят Я нанял повара, и отношения между двумя поварами - кластер.
Отрывок из Чжиху, Ли Пэнфэй

2 Создание распределенного проекта

Инструменты для подготовки: eclipse, VMwarm с системой CentOS7, zookeeper... Самое главное, машина трехлетней давности.

1 Сначала создайте проект maven родительского класса, упакованный в pom.

Создайте проект maven родительского класса в eclipse, а метод упаковки — pom.Зачем создавать проект maven родительского класса?Поскольку этот проект maven используется для управления версией каждого пакета jar, подкласс хочет, чтобы пакет jar следовал непосредственно за родительским класс Вы можете, если хотите.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.itqf</groupId>
  <artifactId>sping-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <!-- 定义所有jar包的版本 -->
	  <properties>
	    <junit.version>4.12</junit.version>
		<spring.version>4.2.4.RELEASE</spring.version>
		<mybatis.version>3.2.8</mybatis.version>
		<mybatis.spring.version>1.2.2</mybatis.spring.version>
		<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
		<mysql.version>5.1.32</mysql.version>
		<slf4j.version>1.6.4</slf4j.version>
		<jackson.version>2.4.2</jackson.version>
		<druid.version>1.0.9</druid.version>
		<httpclient.version>4.3.5</httpclient.version>
		<jstl.version>1.2</jstl.version>
		<servlet-api.version>2.5</servlet-api.version>
		<jsp-api.version>2.0</jsp-api.version>
		<joda-time.version>2.5</joda-time.version>
		<commons-lang3.version>3.3.2</commons-lang3.version>
		<commons-io.version>1.3.2</commons-io.version>
		<commons-net.version>3.3</commons-net.version>
		<pagehelper.version>3.4.2-fix</pagehelper.version>
		<jsqlparser.version>0.9.1</jsqlparser.version>
		<commons-fileupload.version>1.3.1</commons-fileupload.version>
		<jedis.version>2.7.2</jedis.version>
		<solrj.version>4.10.3</solrj.version>
		<dubbo.version>2.5.3</dubbo.version>
		<zookeeper.version>3.4.7</zookeeper.version>
		<zkclient.version>0.1</zkclient.version>
		<activemq.version>5.11.2</activemq.version>
		<freemarker.version>2.3.23</freemarker.version>
		<quartz.version>2.2.2</quartz.version>
	  </properties>
	  <!-- 管理所有项目中用到的jar包,并不做真正的依赖 -->
	  <dependencyManagement>
	      <dependencies>
			<!-- 时间操作组件 -->
			<dependency>
				<groupId>joda-time</groupId>

2 Создайте проект агрегации maven.

2.1 Создайте проект агрегации maven и наследуйте родительский проект.

Агрегирующий проект: вы можете разделить уровень контроллера, уровень представления и т. д. в проекте на проект и интегрировать их вместе при запуске.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.itqf</groupId>
    <artifactId>sping-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.itqf</groupId>
  <artifactId>sping-manager</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <dependencies>
      <dependency>
          <groupId>com.itqf</groupId>
          <artifactId>sping-common</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>
  </dependencies>
  
  <build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8083</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
 </build>
  
  <modules>
  	<module>sping-manager-pojo</module>
  	<module>sping-manager-interface</module>
  	<module>sping-manager-service</module>
  	<module>sping-manager-mapper</module>
  </modules>
</project>

2.2 Создайте модуль maven в проекте агрегации и назовите его sping-manager-pojo (уровень класса объектов).

  1. pojo — это распространенный формат jar, и он не должен зависеть от родительского проекта.
    pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.itqf</groupId>
    <artifactId>sping-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>sping-manager-pojo</artifactId>
</project>

2.3 Создайте модуль maven в проекте агрегации и назовите его sping-manager-mapper (уровень dao).

  • Положитесь на pojo в файле pom.xml.Поскольку метод слоя картографа возвращает объект класса сущности, вам необходимо использовать pojo.
  • Импортируйте пакет jar зависимостей.
    xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.itqf</groupId>
    <artifactId>sping-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>sping-manager-mapper</artifactId>
  
  <!-- 依赖pojo -->
  <dependencies>
      <dependency>
          <groupId>com.itqf</groupId>
          <artifactId>sping-manager-pojo</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>
      
      <!-- Mybatis -->
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis</artifactId>
				<version>${mybatis.version}</version>
			</dependency>
			<dependency>
				<groupId>org.mybatis</groupId>
				<artifactId>mybatis-spring</artifactId>
				<version>${mybatis.spring.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.miemiedev</groupId>
				<artifactId>mybatis-paginator</artifactId>
				<version>${mybatis.paginator.version}</version>
			</dependency>
			<dependency>
				<groupId>com.github.pagehelper</groupId>
				<artifactId>pagehelper</artifactId>
				<version>${pagehelper.version}</version>
			</dependency>
			<!-- MySql -->
			<dependency>
				<groupId>mysql</groupId>
				<artifactId>mysql-connector-java</artifactId>
				<version>${mysql.version}</version>
			</dependency>
			<!-- 连接池 -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>druid</artifactId>
				<version>${druid.version}</version>
			</dependency>
      
  </dependencies>
</project>

2.4 Создать sping-manager-interface (интерфейс) в проекте агрегации, а все сервисные интерфейсы вынести в отдельные проекты.

  • Если возвращаемое значение метода в интерфейсе является классом сущности, вам нужно использовать pojo, поэтому полагайтесь на pojo в pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.itqf</groupId>
    <artifactId>sping-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>sping-manager-interface</artifactId>
  
  <dependencies>
      <dependency>
          <groupId>com.itqf</groupId>
          <artifactId>sping-manager-pojo</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>
  </dependencies>
  
</project>

2.5 Создать sping-manager-service (реализация класса интерфейса) в проекте агрегации Метод упаковки war

Поскольку уровень контроллера отделен от уровня службы, необходимо использовать tomcat для публикации контроллера и службы отдельно при запуске и запуске, а также поместить файлы конфигурации, необходимые в проекте агрегации, в службу, чтобы конфигурация была возвращена. при запуске Tomcat.Файлы загружаются и интегрируются.

  • Сервис должен использовать интерфейс, поэтому он зависит от интерфейса sping-manager-interface.
  • Служба должна использовать pojo, а также вызывать маппер, поэтому вы можете напрямую полагаться на маппер, думая, что маппер уже зависит от pojo.(переходная зависимость).
  • Служба должна управляться Spring, пусть Spring создает объекты для службы.
  • для сервиса требуется пакет dubbo (dubbo будет представлен позже)
  • Служба должна использовать SOA и публиковать службу как службу.

конфигурационный файл
SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>

db.properties

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=UTF-8
db.username=root
db.password=root

applicationContext-tx.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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
   
   <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource"></property>
   </bean>     
   
   <tx:advice id="adviceId" transaction-manager="txManager">
      <tx:attributes>
           <tx:method name="add*" propagation="REQUIRED"/>
           <tx:method name="save*" propagation="REQUIRED"/>
           <tx:method name="insert*" propagation="REQUIRED"/>
           <tx:method name="update*" propagation="REQUIRED"/>
           <tx:method name="del*" propagation="REQUIRED"/>
           <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
           <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
      
      </tx:attributes>
  </tx:advice>
   
  <aop:config>
      <aop:advisor advice-ref="adviceId" pointcut="execution(* com.itqf.service..*.*(..))"/>
  </aop:config>     
        
        
</beans>

applicationContext-dao.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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
   
   <context:property-placeholder location="classpath:resource/*.properties"/>

   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${db.driver}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="username" value="${db.username}"></property>
        <property name="password" value="${db.password}"></property>
        <property name="maxActive" value="10"></property>
        <property name="minIdle" value="5"></property>
   </bean>
   
   
   <bean class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"></property>
       <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
   </bean>
   
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.itqf.mapper"></property>
   </bean>

</beans>  

applicationContext-service.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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
    
    <context:component-scan base-package="com.itqf.service"></context:component-scan>   
</beans>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.qianfeng</groupId>
    <artifactId>sping-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>sping-manager-service</artifactId>
  
  <packaging>war</packaging>
  
  
  <dependencies>
       <dependency>
           <groupId>com.qianfeng</groupId>
           <artifactId>sping-manager-interface</artifactId>
           <version>0.0.1-SNAPSHOT</version>
       </dependency>
       
       <dependency>
           <groupId>com.qianfeng</groupId>
           <artifactId>sping-manager-mapper</artifactId>
           <version>0.0.1-SNAPSHOT</version>
       </dependency>
     
       <!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-webmvc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jms</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>${spring.version}</version>
			</dependency>
	     
  </dependencies>
</project>

окончательная инженерная конструкция


3 Используйте dubbo для публикации сервиса

Думать сначала?
Веб-сайты торговых центров, такие как Taobao Jingdong, могут не только войти с ПК, но и с мобильного телефона, так как же это достигается? Написать два контроллера? Это определенно не так, кто будет бездействовать, чтобы найти, чем заняться, тогда это требует использования SOA (сервис-ориентированная архитектура). Тогда, когда мы пишем проект с использованием распределенного, будет много систем, вызывающих друг друга. Если вызовы туда и обратно сделают структуру кода очень запутанной. Здесь мы используем dubbo для управления, Решить проблему, что издательских сервисов слишком много и непонятно.


Что такое СОА

SOA — это метод проектирования, который включает в себя несколько сервисов, и сервисы в конечном итоге будут выполнять ряд функций посредством сотрудничества. Служба обычно существует как отдельная форма в процессе операционной системы. Службы взаимодействуют через сетевые вызовы, а не внутрипроцессные вызовы.
Например, у вас появилось множество сервисов: служба новостей (предоставление выпуска новостей, просмотр, изменение, удаление), служба заказа (добавление заказа, модификация заказа, просмотр заказа, удаление заказа и т. д.), финансовые сервисы (доходы, расходы, статистика, и т.д.) услуги персонала (добавление, изменение, просмотр, статистика) услуги посещаемости (заезд, выезд, экспорт, статистика и т.д.) услуги продаж (отчетность по продажам, статистика продаж.)

Преимущества и недостатки SOA

Ссылка: плюсы, минусы и неудобства SOA


dubbo

Что такое dubbo (инструмент управления для планирования ресурсов и центра управления)
С развитием Интернета масштаб веб-приложений продолжает расширяться, и традиционная вертикальная архитектура приложений больше не может справляться.Обязательны архитектура распределенных услуг и архитектура мобильных вычислений, и срочно необходима система управления для обеспечения упорядоченной эволюции архитектура.

  • архитектура единого приложения
    • Когда трафик веб-сайта невелик, требуется только одно приложение, и все функции развертываются вместе, чтобы уменьшить количество узлов развертывания и затраты.
    • На данный момент ключевым фактором является структура доступа к данным (ORM), упрощающая рабочую нагрузку CRUD.
  • Вертикальная архитектура приложений
    • Когда количество посещений постепенно увеличивается, ускорение, вызванное добавлением одного приложения к машине, становится все меньше и меньше, и приложение делится на несколько приложений, которые не связаны друг с другом для повышения эффективности.
    •  На данном этапе ключевую роль играет веб-фреймворк (MVC) для ускорения разработки интерфейсных страниц.
  • Распределенная сервисная архитектура
    • Когда вертикальных приложений становится все больше, взаимодействие между приложениями становится неизбежным, основной бизнес выделяется как самостоятельный сервис, и постепенно формируется стабильный сервисный центр, чтобы фронтенд-приложения могли быстрее реагировать на меняющиеся запросы рынка.
    • В настоящее время ключевым фактором является структура распределенных служб (RPC) для улучшения повторного использования и интеграции в бизнесе.
  • Архитектура мобильных вычислений
    • Когда услуг становится все больше и больше, постепенно возникают такие проблемы, как оценка емкости и растрата небольших сервисных ресурсов, необходимо добавить диспетчерский центр для управления емкостью кластера в режиме реального времени на основе давления доступа и повышения коэффициента использования кластера.
    • На данном этапе центр планирования ресурсов и управления (SOA) для повышения эффективности использования машин является ключевым.Построение среды Dubbo:

Описание роли узла:

  • Поставщик: поставщик услуг, предоставляющий услугу.
  • Потребитель: потребитель службы, который вызывает удаленную службу.
  • Реестр: Реестр для регистрации и обнаружения служб.
  • Монитор: центр мониторинга, который подсчитывает вызовы службы и время вызова.
  • Контейнер: служба запускает контейнер.

Описание отношения вызова:

  1. Контейнер службы отвечает за запуск, загрузку и работу поставщика службы.
  2. Когда поставщик услуг запускается, он регистрирует предоставляемую им услугу в реестре.
  3. Когда потребитель службы запускается, он подписывается на необходимые ему службы в реестре.
  4. Реестр возвращает список адресов поставщика услуг потребителю.Если есть изменение, реестр передаст данные об изменении потребителю на основе постоянного соединения.
  5. Потребитель услуги из списка адресов провайдера выбирает провайдера для вызова на основе алгоритма мягкой балансировки нагрузки и, если вызов завершается неудачей, выбирает другого провайдера для вызова.
  6. Потребители и поставщики услуг накапливают в памяти количество звонков и время звонков и регулярно каждую минуту отправляют статистические данные в центр мониторинга.

Здесь мы в основном приходим к реестру (Registry), мы используем Zookeeper в качестве реестра.

Разверните реестр в среде Linux, Zookeeper

  1. Первый шаг конечно же открыть виртуальную машину, я до сих пор это делаю в CentOS7.
  2. Получите сжатый пакет Zookeeper онлайн, мой Zookeeper-3.4.6.tar.gz
  3. Вставьте его в каталог /opt и распакуйте (требуется среда jdk, если среды jdk нет, сначала установите jdk).
  4. Перейдите в каталог zookeeper-3.4.6 и создайте папку с именем data.
  5. Переименуйте zoo_sample.cfg в каталоге ./conf в zoo.cfg.
  6. Измените атрибут данных в zoo.cfg: dataDir=/opt/zookeeper-3.4.6/data
  7. Шаг 7: Запустите zookeeper.
    • Старт: ./zkServer.sh старт
    • Закрыть: ./zkServer.sh остановить
    • Посмотреть статус: статус ./zkServer.sh

Обратите внимание, что брандмауэр должен быть выключен после запуска zookeeper!!!Это сделано.

Добавьте файл конфигурации в applicationContext-service.xml службы, чтобы опубликовать службу.

<!-- 使用dubbo发布服务 -->  
    <!-- 指明服务所在的工程 -->  
    <dubbo:application name="sping-manager"/>
    
    <!-- 指明注册中心 adress地址是linux中的ip地址加上端口号,zookeeper的默认端口号是2181 -->
    <dubbo:registry protocol="zookeeper" address="10.0.117.198:2181" ></dubbo:registry>
        
    <!-- 把服务暴露在某个端口 port是端口号,选择一个没有被占用的端口 -->  
    <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>  
    
    <!-- 发布服务,ref是Spring容器创建的Service对象的名称 -->    			 
    <dubbo:service interface="com.itqf.service.ItemService" ref="itemServiceImpl" timeout="6000000"></dubbo:service>

Импортируйте пакет в pom.xml службы.

  <!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<!-- 排除依赖 -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

4 Создайте sping-manager-controller на уровне проекта агрегации Импортируйте зависимости.

Контроллер должен использовать Интернет для доступа к службам, опубликованным сервисным уровнем.Чтобы использовать сервер Tomcat для публикации, конечно, вам нужно использовать springmvc.
xml

  <dependencies>
      <!-- 只需依赖业务的接口 -->
      <dependency>
          <groupId>com.qianfeng</groupId>
          <artifactId>sping-manager-interface</artifactId>
          <version>0.0.1-SNAPSHOT</version>
      </dependency>
      
      <!-- Spring -->
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-webmvc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jdbc</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-jms</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context-support</artifactId>
				<version>${spring.version}</version>
			</dependency>
      
      <!-- JSP相关 -->
			<dependency>
				<groupId>jstl</groupId>
				<artifactId>jstl</artifactId>
				
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>servlet-api</artifactId>
				
				<scope>provided</scope>
			</dependency>
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>jsp-api</artifactId>
				<scope>provided</scope>
			</dependency>
			
		<!-- dubbo相关 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<!-- 排除依赖 -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>
     
  </dependencies>
  
  <build>
		<plugins>
			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<configuration>
					<port>8081</port>
					<path>/</path>
				</configuration>
			</plugin>
		</plugins>
 </build>

spingmvc.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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-4.2.xsd">
      
      <context:component-scan base-package="com.itqf.controller"></context:component-scan>
      
      <mvc:annotation-driven></mvc:annotation-driven>
      
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           <property name="prefix" value="/WEB-INF/jsp/"></property>
           <property name="suffix" value=".jsp"></property>
      </bean>
      
      <!--指明所在工程 -->
      <dubbo:application name="sping-manager-controller"/>
      
      <!-- 指明注册中心 -->
      <dubbo:registry protocol="zookeeper" address="10.0.117.198:2181"></dubbo:registry>
      
      <!--调用服务  -->
      <dubbo:reference interface="com.itqf.service.ItemService" id="itemService"></dubbo:reference>
        
</beans>

Структурная схема:

5 Создайте sping-common

Это место, которое мне нужно использовать для размещения инструментов, здесь используется для размещения некоторых общественных нужд;pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.itqf</groupId>
    <artifactId>sping-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <groupId>com.itqf</groupId>
  <artifactId>sping-common</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
			<!-- 时间操作组件 -->
			<dependency>
				<groupId>joda-time</groupId>
				<artifactId>joda-time</artifactId>
				<version>${joda-time.version}</version>
			</dependency>
			<!-- Apache工具组件 -->
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>${commons-lang3.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-io</artifactId>
				<version>${commons-io.version}</version>
			</dependency>
			<dependency>
				<groupId>commons-net</groupId>
				<artifactId>commons-net</artifactId>
				<version>${commons-net.version}</version>
			</dependency>
			<!-- Jackson Json处理工具包 -->
			<dependency>
				<groupId>com.fasterxml.jackson.core</groupId>
				<artifactId>jackson-databind</artifactId>
				<version>${jackson.version}</version>
			</dependency>
	</dependencies>
  
</project>

6 тест

Ну вот такой псевдораспределенный проект построен.Следующий очень важный момент это то, что нужно установить родительский проект, проект агрегации sping-manager, и sping-common в локальный склад, в противном случае запускать проект Когда будет сообщено об ошибке, что родительский проект или другие проекты не могут быть найдены.
Окончательный инженерный чертеж:

Суммировать:

После нескольких часов напряженной работы он был наконец построен, и он собирался взорвать мою старую машину.Если есть какие-либо ошибки или недостатки, пожалуйста, дайте мне знать.