一、SpringCloud
1姚建、注冊(cè)中心eureka-server
配置文件
server.port=8761
spring.application.name=server
eureka.instance.hostname=server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#默認(rèn)配置也是http://localhost:8761/eureka/
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
在SpringBoot主程序上添加@EnableEurekaServer開(kāi)啟服務(wù),主程序運(yùn)行后可以在瀏覽器http://localhost:8761查看注冊(cè)的服務(wù)
2吱殉、提供者eureka-provider
配置文件
spring.application.name=provider
server.port=8081
eureka.instance.prefer-ip-address=true //使用ip地址來(lái)注冊(cè)服務(wù)
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
TicketService
public interface TicketService {
public String getTicket();
}
TicketServiceImpl
@Service
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《魔獸世界大電影》";
}
}
TicketController
@RestController
public class TicketController {
@Autowired
TicketService ticketService;
@GetMapping("/getTicket")
public String getTicket(){
return ticketService.getTicket();
}
}
啟動(dòng)主程序后將會(huì)把服務(wù)注冊(cè)到自己配置的eureka注冊(cè)中心
3掸冤、Eureka-Consumer
配置文件
server.port=8082
spring.application.name=consumer
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
SpringBoot主程序
@SpringBootApplication
@EnableDiscoveryClient //開(kāi)啟Eureka客戶端發(fā)現(xiàn)服務(wù)
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
//主要將RestTemplate放入容器,可以在其他配置類
@Bean
@LoadBalanced //當(dāng)使用服務(wù)注冊(cè)中心的Application名時(shí)必須開(kāi)啟友雳,否則會(huì)異常找不到服務(wù)
//如果使用服務(wù)時(shí)用得時(shí)ip地址+端口號(hào)的方式則不能使用負(fù)載均衡
RestTemplate restTemplate(){
return new RestTemplate();
}
}
Controller
@RestController
public class MyController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/buyTicket")
public String buyTicket(String name){
//使用ip+port方式稿湿,RestTemplate就不能使用@LoadBalanced負(fù)載均衡
//String ticket = restTemplate.getForObject("http://localhost:8081/getTicket", String.class);
//PROVIDER為注冊(cè)中心服務(wù)名,RestTemplate就必須使用@LoadBalanced負(fù)載均衡
String ticket = restTemplate.getForObject("http://PROVIDER/getTicket", String.class);
return name + "購(gòu)買了" + ticket;
}
}
二押赊、Dubbo
1饺藤、使用docker安裝zookeeper,測(cè)試使用的是zookeeper 3.4.12和3.4.14
2流礁、pom依賴涕俗,需要?jiǎng)?chuàng)建兩個(gè)模塊Provider和Consumer,都加入以下依賴(若版本問(wèn)題報(bào)錯(cuò)可以看另一篇文章)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.12</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>
3崇棠、Provider
配置文件
server.port=8100
spring.application.name=provider
dubbo.scan.base-packages=com.crsbg.provider.service
dubbo.registry.address=zookeeper://zookeeper所在服務(wù)器ip地址:2182
dubbo.registry.timeout=10000 #默認(rèn)為3000
ProServiceImpl
@Component
@DubboService
public class ProServiceImpl implements ProService {
@Override
public String getTicket() {
return "《魔獸世界大電影》";
}
}
4咽袜、Consumer
配置文件
server.port=8200
spring.application.name=consumer
dubbo.registry.address=zookeeper://zookeeper所在服務(wù)器ip地址:2182
dubbo.registry.timeout=10000
在Consumer中創(chuàng)建一個(gè)和provider中ProService相同的接口,全類名要一致
Cousumer自己的Service
@Service
public class ConService {
@DubboReference
ProService proService;
public String buyTicket(){
return proService.getTicket();
}
}
Controller
@RestController
public class ConController {
@Autowired
ConService conService;
@RequestMapping("/buyTicket")
public String buyTicket(String name){
return name + "購(gòu)買了" + conService.buyTicket();
}
}