1. 程式人生 > 其它 >springcloud-服務的生產者和消費者

springcloud-服務的生產者和消費者

  1. provider 服務生產者環境的搭建

    匯入相關依賴:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置yml檔案

server:
port: 8001

mybatis:
type-aliases-package: com.fly.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
configuration:
map-underscore-to-camel-case: true

spring:
application:
name: springcloud-provider-dept
#資料來源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:4001/db01?serverTimeZone=UTC&useUnicode=true&characterEncoding=utf-8
username: *****
password: *******

#eureka配置
eureka:
client:
service-url:
#連線的eureka地址
defaultZone: http://localhost:7001/eureka

instance:
instance-id: springcloud-privider-dept-8001


info:
app.name: zhu
company.name: zhu

編寫主啟動類

@SpringBootApplication
@EnableEurekaClient //開啟eureka客戶端配置
//@EnableCircuitBreaker
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}

  1. consumer服務消費者的搭建

##服務的搭建和配置和生產者一致##

呼叫方式:Ribbon 和 Feign 兩種

匯入ribbon相關的依賴

<!-- ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>

Ribbon呼叫方式:

//編寫RestTemplate配置,並配置負載均衡機制預設是輪詢(這樣可以直接通過服務名去呼叫)
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}


//呼叫示例:
@RestController
public class DeptConsumerController {

@Resource
private RestTemplate restTemplate;

@Resource
private DiscoveryClient client;

//服務的生產者的服務名
private static final String REST_URL_PREFIX = "http://springcloud-provider-dept";

@GetMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
Dept dept = restTemplate.getForObject(REST_URL_PREFIX + "/dept/getById?id=" + id, Dept.class);
return dept;
}
}

Feign 呼叫方式:

Feign 呼叫方式更能體現面向介面程式設計的思想

//主啟動類中需要開啟Feign相關的配置
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = {"com.fly"})
public class FeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignConsumerApplication.class, args);
}
}

//1. 編寫一個服務呼叫的介面
@Component
//指定要呼叫的服務端的服務名稱
@FeignClient(value = "springcloud-provider-dept")
public interface DeptService {

@GetMapping("/dept/getById")
public Dept queryDeptById(Long id);

@GetMapping("/dept/list")
public List<Dept> queryAll();
}


//按照介面的方式直接呼叫
@RestController
public class DeptConsumerController {

@Resource
private DeptService deptService;

@GetMapping("/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
return deptService.queryDeptById(id);
}

@GetMapping("/consumer/dept/list")
public List<Dept> list() {
return deptService.queryAll();
}
}