Spring Cloud学习笔记之微服务实现(二)(Spring Boot+Spring Cloud+IDEA)

在【Spring Cloud学习笔记之微服务实现(一)】中,我们实现了微服务,但是在实际的项目中,我们需要实现动态访问微服务,在此之前,已经介绍了Spring Cloud和Eureka,并且实现了eureka注册中心。现在我们实现一下动态调用。
注:注册中心的服务在此期间保持启动状态。

修改商品微服务的实现
首先修改配置信息:
我们增加Spring Cloud的依赖管理和Eureka服务的依赖,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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>MySpringCloudProject01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- 配置信息 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.14.RELEASE</version>
    </parent>

    <dependencies>
        <!-- 加入web的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 导入Eureka服务的依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <!-- 导入Spring Cloud的依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

我们修改一下配置文件application.properties:

server.port=8081

#应用名称
spring.application.name=itcast-microservice-item

#是否需要将自己注册到注册中心中,默认值true
eureka.client.register-with-eureka=true

#是否从注册中心获取注册信息,默认值true
eureka.client.fetch-registry=false

#客户端和服务端进行交互的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8088/eureka/

#将自己的ip地址注册到Eureka服务中
eureka.instance.ip-address=true

然后我们修改相关代码:
ItemController.java:

@RestController
public class ItemController {
    @Autowired
    private ItemService itemService;
    @GetMapping(value = "/item/{id}")
    public Item queryItemById(@PathVariable(name = "id") Long id){
        return itemService.queryItemById(id);
    }
}

App.java:

@EnableDiscoveryClient         //声明这是Eureka的客户端
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

其余代码不需要修改。修改完成后我们启动App,然后刷新注册中心,可以看到服务注册到了注册中心:
在这里插入图片描述
修改订单微服务的实现
首先修改配置信息:
我们增加Spring Cloud的依赖管理和Eureka服务的依赖,我们排除了Eureka Server的一部分配置,因为我们在项目中引入了Eureka Server的依赖,会破坏springMVC的配置,会导致响应变成xml而不是json。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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>MySpringCloudProject02</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- 配置信息 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.14.RELEASE</version>
    </parent>

    <dependencies>
        <!-- 加入web的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 导入Eureka服务的依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <!--  排除eureka server的一些配置 -->
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.dataformat</groupId>
                    <artifactId>jackson-dataformat-xml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <!-- 导入Spring Cloud的依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Edgware.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

application.properties:

server.port=8082

itcast.item.url=http://localhost:8081/item/

#应用名称
spring.application.name=itcast-microservice-order

#是否需要将自己注册到注册中心中,默认值true
eureka.client.register-with-eureka=false

#是否从注册中心获取注册信息,默认值true
eureka.client.fetch-registry=false

#客户端和服务端进行交互的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8088/eureka/

修改相关代码:
ItemService.java:

@Service
public class ItemService {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private DiscoveryClient discoveryClient;
    public Item queryItemById(Long id){
        String serviceId = "itcast-microservice-item";
        List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
        if (instances == null || instances.isEmpty()){
            return null;
        }
        ServiceInstance serviceInstance = instances.get(0);
        //拼接服务地址
        String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort();
        Item item = restTemplate.getForObject(url + id, Item.class);
        return item;
    }
}

App.java:

@EnableDiscoveryClient
@SpringBootApplication
public class App {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

其余代码不需要修改。修改完成后我们启动App,然后在浏览器中输入网址: http://localhost:8082/order/12345 ,可以看到如下执行结果:
在这里插入图片描述
这样我们就实现了将服务注册到Eureka注册中心,然后动态调用微服务。

注:以上为【黑马程序员|java进阶教程Spring Cloud微服务解决方案】视频的学习笔记,侵删。

扫描二维码关注公众号,回复: 3634955 查看本文章

猜你喜欢

转载自blog.csdn.net/wangruoao/article/details/83057874