SpringBoot融合了maven的特點,所以可以和maven完美整合。
接下來要做一個分布式項目,首先要有共享的接口:
先建一個maven項目:
詳情:
UserAddress.java
package com.changping.bean; import java.io.Serializable; public class UserAddress implements Serializable { private Integer id; private String userAddress; //用戶地址 private String userId; //用戶id private String consignee; //收貨人 private String phoneNum; //電話號碼 private String isDefault; //是否為默認地址 Y-是 N-否 public UserAddress() { super(); } public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum, String isDefault) { super(); this.id = id; this.userAddress = userAddress; this.userId = userId; this.consignee = consignee; this.phoneNum = phoneNum; this.isDefault = isDefault; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getConsignee() { return consignee; } public void setConsignee(String consignee) { this.consignee = consignee; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public String getIsDefault() { return isDefault; } public void setIsDefault(String isDefault) { this.isDefault = isDefault; } }
OrderService.java
package com.changping.service; import java.util.List; import com.changping.bean.UserAddress; public interface OrderService { public List<UserAddress> initOrder(String userId); }
UserService.java
package com.changping.service; import java.util.List; import com.changping.bean.UserAddress; public interface UserService { public List<UserAddress> getUserAddressList(String userId); }
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> <groupId>com.changping.mall</groupId> <artifactId>mall_interface</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <!-- 引入dubbo --> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> <!-- 注冊中心使用的是zookeeper,引入操作zookeeper的客戶端端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <!--Dubbo Spring Boot Starter,一定要針對springboot2.6.2版本 --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.1</version> </dependency> <!-- 1.連接池 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.2</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- 2.Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 3.MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 4.SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 5.輔助 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1.3-b06</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <!-- 6.webservice-cxf --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.5.2</version> </dependency> <!-- 7.事務 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- 1 spring容器事務 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> </dependencies> </project>
以上項目會作為下面兩個項目的依賴。
新建springboot項目用來提供服務
UserServiceImpl.java
package com.changping.mall.userserviceimpl; import java.util.Arrays; import java.util.List; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Service; import com.changping.bean.UserAddress; import com.changping.service.UserService; @Service //dubbo注解暴露接口 @Component //spring注解 public class UserServiceImpl implements UserService { public List<UserAddress> getUserAddressList(String userId) { System.out.println("UserServiceImpl.....1..."); UserAddress address1 = new UserAddress(1, "花果山福地", "1", "齊天大聖", "123456", "Y"); UserAddress address2 = new UserAddress(2, "水簾洞洞天", "1", "六耳獼猴", "654321", "N"); return Arrays.asList(address1,address2); } }
SpringbootUserserviceProviderApplication (啟動類)
package com.changping.mall; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; @SpringBootApplication @EnableDubbo //開啟基於注解的dubbo功能 public class SpringbootUserserviceProviderApplication { public static void main(String[] args) { SpringApplication.run(SpringbootUserserviceProviderApplication.class, args); } }
application.properties(配置信息)
dubbo.application.name=user-service-provider dubbo.registry.protocol=zookeeper dubbo.registry.address=127.0.0.1:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=-1 dubbo.monitor.protocol=registry
SpringbootUserserviceProviderApplicationTests (單元測試)
package com.changping.mall; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)//用於指定junit運行環境,是junit提供給其它框架測試環境接口的擴展 @SpringBootTest public class SpringbootUserserviceProviderApplicationTests { @Test public void contextLoads() { } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.changping.mall</groupId> <artifactId>springboot-userservice-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-userservice-provider</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.changping.mall</groupId> <artifactId>mall_interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
此時可以啟動zkServer、zkCli、然后打包發布到web上
在該路徑下執行:zkServer.cmd
zkCli.cmd
在該路徑下執行:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
接下來去瀏覽器訪問
http://localhost:7001
首頁
接着啟動服務提供者
console信息
SLF4J: Class path contains multiple SLF4J bindings. :: Dubbo Spring Boot (v0.2.0) : https://github.com/apache/incubator-dubbo-spring-boot-project 2020-03-30 15:26:11.180 INFO 13804 --- [ main] e.OverrideDubboConfigApplicationListener : Dubbo Config was overridden by externalized configuration {dubbo.application.name=order-service-consumer, dubbo.monitor.protocol=registry, dubbo.registry.address=zookeeper://127.0.0.1:2181} . ____ _ __ _ _ 2020-03-30 15:26:11.661 INFO 13804 --- [ main] pringbootOrderserviceConsumerApplication : Starting SpringbootOrderserviceConsumerApplication on DESKTOP-NF046H7 with PID 13804 (D:\workspace\springboot\springboot-orderservice-consumer\target\classes started by YZ in D:\workspace\springboot\springboot-orderservice-consumer) |
可以看到瀏覽器
新建springboot項目提供消費者
OrderController.java
package com.changping.mall.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.changping.bean.UserAddress; import com.changping.service.OrderService; @Controller public class OrderController { @Autowired OrderService orderService;//引入maven項目里的mall_interface里的OrderService接口 @ResponseBody//返回json @RequestMapping("initOrder") public List<UserAddress> initOrder(@RequestParam("uid") String userId)//前端傳值 { List<UserAddress> addressList = orderService.initOrder(userId); return addressList; } }
OrderServiceImp.java
package com.changping.mall.orderserviceimp; import java.util.List; import org.springframework.stereotype.Service; import com.alibaba.dubbo.config.annotation.Reference; import com.changping.bean.UserAddress; import com.changping.service.OrderService; import com.changping.service.UserService; @Service public class OrderServiceImp implements OrderService{ @Reference //dubbo里引用遠程服務的注解 UserService userService; public List<UserAddress> initOrder(String userId) { List<UserAddress> userAddress = userService.getUserAddressList(userId); return userAddress; } }
SpringbootOrderserviceConsumerApplication(啟動)
package com.changping.mall; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; @EnableDubbo @SpringBootApplication //@SpringBootApplication(scanBasePackages = {"com.changping.service.UserService"}) public class SpringbootOrderserviceConsumerApplication { public static void main(String[] args) { SpringApplication.run(SpringbootOrderserviceConsumerApplication.class, args); } }
application.properties(配置文件)
dubbo.application.name=order-service-consumer dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.monitor.protocol=registry
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.changping.mall</groupId> <artifactId>springboot-orderservice-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-orderservice-consumer</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.changping.mall</groupId> <artifactId>mall_interface</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
需要雙擊啟動start.bat
首先看一下配置文件,其中jetty.port之前為8080,需要修改一下為8081,避免與tomecat沖突:
雙擊start.bat后:
可以去瀏覽器訪問一下,如圖是注冊中心
可以看一下services,此時還沒有消費者
SpringbootOrderserviceConsumerApplication啟動消費者應用
console信息
SLF4J: Class path contains multiple SLF4J bindings. :: Dubbo Spring Boot (v0.2.0) : https://github.com/apache/incubator-dubbo-spring-boot-project 2020-03-30 17:44:00.517 INFO 12428 --- [ main] e.OverrideDubboConfigApplicationListener : Dubbo Config was overridden by externalized configuration {dubbo.application.name=order-service-consumer, dubbo.monitor.protocol=registry, dubbo.registry.address=zookeeper://127.0.0.1:2181} . ____ _ __ _ _ 2020-03-30 17:44:00.761 INFO 12428 --- [ main] pringbootOrderserviceConsumerApplication : Starting SpringbootOrderserviceConsumerApplication on DESKTOP-NF046H7 with PID 12428 (D:\workspace\springboot\springboot-orderservice-consumer\target\classes started by YZ in D:\workspace\springboot\springboot-orderservice-consumer) |
注冊中心
這樣就也有注冊中心了
分別將提供者和消費者再啟動一次,仔細觀察一下吧(我的電腦有些hold不住了,如果三個生產者,三個消費者,就基本可以和博客說拜拜了):
先從監控中心開始
首頁服務治理
系統管理
服務
應用
機器
提供者
消費者
路由規則
動態配置
訪問控制
權重調節
負載均衡
負責人
系統管理
dubbo版本
系統快照
系統狀態
系統日志(有130條)
系統環境
接下來看看注冊中心
Home
Application
Service
Hosts
Registries
Servers
Status
Log
System
好啦,就到這里吧,下節再見。