1.利用IDEA創建一個空項目
2.創建一個模塊(提供者服務):
下一步:
下一步:
下一步:
創建模塊成功,一般刪除 .gitignore、HELP.md、mvnw、mvnw.cmd和.mvn文件夾。使項目看起來更清爽!!
3.編寫提供者服務
①創建java interface文件,名命為:TicketServer
package com.ckfuture.service;
public interface TicketServer {
public String getTicket();
}
②創建 接口實現類,名命為TicketServerImpl
package com.ckfuture.service;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
//服務注冊與發現
@Service //可以被掃描到,在項目啟動就自動注冊到注冊中心
@Component //使用了Dubbo后盡量不要用Service注解
public class TicketServerImpl implements TicketServer {
@Override
public String getTicket() {
return "<創客未來>";
}
}
③修改一下提供者服務的端口(provider-server/resources/application.properties)
server.port=8001
④導入dubbo和zookeeper的依賴,並處理日志沖突
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency>
zookeeper的jar包是zkclient
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
成功導入:
對於日志沖突的處理:
<!-- dubbo-spring-boot-starter--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--日志會沖突--> <!--引入zookeeper--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除這個slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
⑤修改配置(provider-server/resources/application.properties)
server.port=8009 #服務應用名字 dubbo.application.name=provider-server #注冊中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服務要被注冊 dubbo.scan.base-packages=com.ckfuture.service
⑥啟動provider-server服務並在dubbo-admin中查看
4.創建一個模塊(消費者服務)
①導入相關依賴
<!-- dubbo-spring-boot-starter--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!--日志會沖突--> <!--引入zookeeper--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除這個slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
②修改配置(consumer-server/resources/application.properties)
server.port=8002 #消費者去哪里獲取服務,需要暴露自己的名字, # 否則注冊中心不知道誰要服務 dubbo.application.name=consumer-server #注冊中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
③創建一個UserServer.class 消費服務
package com.ckfuture.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //放到容器中 public class UserService { //想拿到provider-server提供的服務,要去注冊中心拿到服務 @Reference //引用,Pom坐標,可以定義路徑相同的接口名 TicketServer ticketServer; public void buyTicket(){ String ticket = ticketServer.getTicket(); System.out.println("在注冊中心獲取一張票:"+ticket); } }
在這里通過“Reference”獲取注冊中心的服務。在本地要建立提供者一樣的TicketServer接口類。即“定義路徑相同的接口名”,否則找不到服務提供者。
④在測試類中測試一下獲取服務
package com.ckfuture; import com.ckfuture.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }
如果運行消費者服務,在注冊中心也可以查看到:
步驟:
前提:zookeeper服務要開啟
1.提供者提供服務
1).導入依賴
2).配置注冊中心的地址,以及服務發現名,和要掃描的包
3).在想要被注冊的服務上面增加一個注解@Service
2.消費者如何消費
1).導入依賴
2).配置注冊中心的地址,配置自己的服務名
3).從遠程注入服務 @Reference