设为首页 加入收藏

TOP

Spring Cloud开发实践(六): 基于Consul和Spring Cloud 2021.0的演示项目(四)
2023-07-25 21:24:08 】 浏览:54
Tags:Spring Cloud 基于 Consul 2021.0 项目
nsul, 都要提供 Controller 方法

<?xml version="1.0" encoding="UTF-8"?>
    ...
    <name>Dummy: Admin API</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.rockbb.test</groupId>
            <artifactId>dummy-common-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>dummy-admin</finalName>
        <resources>
           ...
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
</project>

在主应用入口, 除了 @SpringBootApplication 以外, 还需要增加两个注解

  • @EnableDiscoveryClient(autoRegister=false) 连接到 Consul 并使用服务发现, 默认会将当前节点也注册到 Consul 作为服务. 对于纯消费节点, 不对其它节点提供接口的, 使用 autoRegister=false 可以避免将自己注册到 Consul
  • @EnableFeignClients(basePackages = {"com.rockbb.test.dummy.common.api"}) 扫描对应的包, 对 @FeignClient 注解实例化接口代理
/* Attach to discovery service without registering itself */
@EnableDiscoveryClient(autoRegister=false)
@EnableFeignClients(basePackages = {"com.rockbb.test.dummy.common.api"})
@SpringBootApplication
public class AdminApp {
    public static void main(String[] args) {
        SpringApplication.run(AdminApp.class, args);
    }
}

在调用方法的地方, 按普通 Service 注入和调用

@Slf4j
@RestController
public class IndexController {

    @Autowired
    private UserDTOService userDTOService;

    @GetMapping(value = "/user_get")
    public String doGetUser() {
        UserDTO user = userDTOService.get(100L);
        return user.getId() + ":" + user.getName();
    }

    @GetMapping(value = "/user_add")
    public String doAddUser() {
        UserDTO user = new UserDTO();
        user.setName("foobar");
        int result = userDTOService.add(user);
        return String.valueOf(result);
    }

可以通过注入的 DiscoveryClient 对象, 查看对应服务的服务地址(一般不需要)

@Autowired
private DiscoveryClient discoveryClient;

@GetMapping("/services")
public Optional<URI> serviceURL() {
    return discoveryClient.getInstances(CommonConstant.SERVICE_NAME)
            .stream()
            .map(ServiceInstance::getUri)
            .findFirst();
}

项目代码

项目的完整代码已经上传至 GitHub, 仓库地址: https://github.com/MiltonLai/spring-cloud-demos

与文中的模块相比, 增加了两个模块 dummy-file-api 和 dummy-file-impl 用于演示多级调用.

参考

  • Consul和Spring Boot非常详细的配置教程 https://medium.com/javarevisited/hands-on-consul-with-spring-boot-1ebf2918165c
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Spring Boot 实现跨域的 5 种方式.. 下一篇利用简单的IO操作实现M3U8文件之..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目