Selaa lähdekoodia

@IPU_REQ_2021@添加springcloud consumer示例

weihf 4 vuotta sitten
vanhempi
commit
1abab705e3

+ 28 - 7
ipu-rest-demo/pom.xml

@ -68,6 +68,21 @@
68 68
				<type>pom</type>
69 69
				<scope>import</scope>
70 70
			</dependency>
71
			<dependency>
72
				<groupId>org.springframework.cloud</groupId>
73
				<artifactId>spring-cloud-dependencies</artifactId>
74
				<version>Greenwich.RELEASE</version>
75
				<type>pom</type>
76
				<scope>import</scope>
77
			</dependency>
78
79
			<dependency>
80
				<groupId>com.alibaba.cloud</groupId>
81
				<artifactId>spring-cloud-alibaba-dependencies</artifactId>
82
				<version>${org.springframework.boot}</version>
83
				<type>pom</type>
84
				<scope>import</scope>
85
			</dependency>
71 86
		</dependencies>
72 87
	</dependencyManagement>
73 88
@ -122,7 +137,15 @@
122 137
			<artifactId>mysql-connector-java</artifactId>
123 138
			<version>8.0.17</version>
124 139
		</dependency>
125
		
140
		<!-- nacos -->
141
		<dependency>
142
			<groupId>com.alibaba.cloud</groupId>
143
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
144
		</dependency>
145
		<dependency>
146
			<groupId>com.alibaba.cloud</groupId>
147
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
148
		</dependency>
126 149
	</dependencies>
127 150
128 151
	<build>
@ -132,13 +155,11 @@
132 155
				<groupId>org.springframework.boot</groupId>
133 156
				<artifactId>spring-boot-maven-plugin</artifactId>
134 157
				<version>2.4.5</version>
135
				
136 158
				    <configuration>
137
      <image>
138
        <name>megale/${project.artifactId}:${project.version}</name>
139
      </image>
140
    </configuration>
141
				
159
                        <image>
160
                            <name>megale/${project.artifactId}:${project.version}</name>
161
                        </image>
162
                     </configuration>			
142 163
			</plugin>
143 164
			<!-- 添加docker镜像功能 -->
144 165
			<plugin>

+ 2 - 0
ipu-rest-demo/readme.md

@ -1,5 +1,7 @@
1 1
一、启动服务脚本范例:java -Dipu.lic.path=D:/git/rest-guide/ipu-rest-demo/ipu.lic -jar target/ipu-rest-demo.jar  --server.port=8080
2 2
注意事项:需要增加证书。参数格式[-Dipu.lic.path]
3
由于增加了dubbo的consumer代码,需要事先启动dubbo的provider服务后再启动ipu-rest-demo。
4

3 5
二、区分context-path、servlet-path、static-path,正确配置拦截器的exclude-mapping
4 6

5 7
三、待办事项

+ 106 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/config/NacosConfig.java

@ -0,0 +1,106 @@
1
package com.ai.ipu.server.demo.config;
2
3
4
import java.util.Properties;
5
import java.util.concurrent.Executor;
6
7
import javax.annotation.PostConstruct;
8
9
import org.springframework.beans.factory.annotation.Value;
10
import org.springframework.context.annotation.Bean;
11
import org.springframework.stereotype.Component;
12
13
import com.ai.ipu.basic.string.StringUtil;
14
import com.alibaba.nacos.api.NacosFactory;
15
import com.alibaba.nacos.api.PropertyKeyConst;
16
import com.alibaba.nacos.api.config.ConfigService;
17
import com.alibaba.nacos.api.config.listener.Listener;
18
import com.alibaba.nacos.api.exception.NacosException;
19
20
21
import lombok.extern.slf4j.Slf4j;
22
23
//springcloud也支持在程序中手工注册到配置中心,此时就可以监听到配置中心推送的配置文件。
24
//springcloud已经不再支持@NacosConfigListener,配置了也不生效。
25
@Component
26
@Slf4j
27
public class NacosConfig {
28
	private String service002Url;
29
	private String service002Param;
30
	
31
	@Bean(name="getService002Url")
32
	public String getService002Url() {
33
		return service002Url;
34
	}
35
	
36
	@Bean(name="getService002Param")
37
	public String getService002Param() {
38
		return service002Param;
39
	}
40
	
41
	
42
	@Value("${spring.cloud.nacos.config.server-addr}")
43
    private String nacosConfigServer;
44
	@Value("${spring.cloud.nacos.namespace}")
45
    private String nacosNamespace;
46
	
47
	@Value("${spring.cloud.nacos.dataid}")
48
    private String dataId;
49
	@Value("${spring.cloud.nacos.group}")
50
    private String group;
51
	@Value("${spring.cloud.nacos.timeout}")
52
    private long timeout;
53
	
54
	@PostConstruct
55
	public void initConfigServer() {
56
		try {
57
	        Properties properties = new Properties();
58
	        if (!StringUtil.isEmpty(nacosNamespace))
59
	        	properties.put(PropertyKeyConst.NAMESPACE, nacosNamespace);
60
	        properties.put(PropertyKeyConst.SERVER_ADDR, nacosConfigServer);
61
	        ConfigService configService = NacosFactory.createConfigService(properties);
62
	        String content = configService.getConfig(dataId, group, timeout);
63
	        //从配置中心获取到指定配置,需要自己解析后给service002Url、service002Param赋值
64
	        log.debug(content);
65
	        dealConfigServerConfig(content);
66
	        configService.addListener(dataId, group, new Listener() {
67
	            @Override
68
	            public void receiveConfigInfo(String configInfo) {
69
	            	//从配置中心获取到推送来的更新配置信息,需要自己解析给service002Url、service002Param赋值
70
	            	log.debug(configInfo);
71
	            	dealConfigServerConfig(configInfo);
72
	            }
73
	
74
	            @Override
75
	            public Executor getExecutor() {
76
	                return null;
77
	            }
78
	        });
79
	    } catch (NacosException e) {
80
	        log.error(e.getMessage());
81
	    }
82
	}
83
	
84
	private void dealConfigServerConfig(String configInfo) {
85
		if (StringUtil.isEmpty(configInfo))
86
			return;
87
		String[] configs = configInfo.split("\n\r|\n|\r|\r\n");
88
		int i=0;
89
		for (;i<configs.length;i++) {
90
			if (!StringUtil.isEmpty(configs[i]))
91
			{
92
				if (configs[i].indexOf("service002Url")>=0)
93
				{
94
					String[] urls = configs[i].split("=");
95
					service002Url = urls[1];
96
				}
97
				if (configs[i].indexOf("service002Param")>=0)
98
				{
99
					String[] params = configs[i].split("=");
100
					service002Param = params[1];
101
				}
102
			}
103
		}
104
	}
105
	
106
}

+ 17 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/config/RestConsumerConfiguration.java

@ -0,0 +1,17 @@
1
package com.ai.ipu.server.demo.config;
2
3
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
4
import org.springframework.context.annotation.Bean;
5
import org.springframework.context.annotation.Configuration;
6
import org.springframework.web.client.RestTemplate;
7
8
9
@Configuration
10
public class RestConsumerConfiguration {
11
12
	@LoadBalanced
13
    @Bean
14
    public RestTemplate ipuRestTemplate() {
15
        return new RestTemplate();
16
    }
17
}

+ 53 - 0
ipu-rest-demo/src/main/java/com/ai/ipu/server/demo/control/nacos/SpringCloudConsumerController.java

@ -0,0 +1,53 @@
1
package com.ai.ipu.server.demo.control.nacos;
2
3
import java.util.Map;
4
5
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.beans.factory.annotation.Value;
10
import org.springframework.cloud.context.config.annotation.RefreshScope;
11
import org.springframework.web.bind.annotation.GetMapping;
12
import org.springframework.web.bind.annotation.RequestMapping;
13
import org.springframework.web.bind.annotation.ResponseBody;
14
import org.springframework.web.bind.annotation.RestController;
15
import org.springframework.web.client.RestTemplate;
16
17
import com.ai.ipu.server.demo.config.NacosConfig;
18
import com.alibaba.nacos.api.exception.NacosException;
19
import com.google.common.collect.Maps;
20
21
22
@RestController
23
@RefreshScope
24
@RequestMapping("/nacos/discovery/restConsumer")
25
public class SpringCloudConsumerController {
26
	private static final Logger logger = LoggerFactory.getLogger(SpringCloudConsumerController.class);
27
28
    @Autowired
29
    private RestTemplate restTemplate;
30
31
    
32
    @Value("${spring.application.name}")
33
    private String appName;
34
    
35
    @Autowired
36
	NacosConfig config;
37
    
38
	@ResponseBody
39
    @GetMapping(value = "/service002")
40
    public String service002() throws NacosException {
41
		
42
		try {
43
			/*用于ipu-spring-plumlog
44
			Map<String, Object> variables = Maps.newHashMap();
45
			variables.put("message", appName);*/
46
			return restTemplate.getForObject("http://ipu-nacos-cloud-provider" + config.getService002Url() + "?message=" + appName , String.class);
47
		} catch (Exception e) {
48
			logger.error(e.getMessage());
49
		}
50
		
51
        return null;
52
    }
53
}

+ 0 - 33
ipu-rest-demo/src/main/java/com/ai/ipu/service/demo/IBizService.java

@ -1,33 +0,0 @@
1
package com.ai.ipu.service.demo;
2

3
import com.ailk.common.data.IData;
4

5
/**
6
 * @author huangbo@asiainfo.com
7
 * @team IPU
8
 * @date 2018年10月23日下午7:25:11
9
 * @desc 业务服务调用案例
10
 */
11
public interface IBizService {
12
    
13
    /**
14
     * @author huangbo@asiainfo.com
15
     * @title: queryUserInfo
16
     * @desc: 查询用户信息
17
     */
18
    public IData queryUserInfo(IData param);
19
    
20
    /**
21
     * @author huangbo@asiainfo.com
22
     * @title: queryUserInfo
23
     * @desc: 查询用户列表
24
     */
25
    public IData queryUserList(IData param);
26
    
27
    /**
28
     * @author huangbo@asiainfo.com
29
     * @title: triggerException
30
     * @desc: 触发业务异常
31
     */
32
    public IData triggerException(IData param);
33
}

+ 12 - 6
ipu-rest-demo/src/main/resources/dev/application.properties

@ -49,12 +49,18 @@ management.security.enabled=false
49 49
#spring.devtools.restart.additional-paths=src/main/java
50 50
#spring.devtools.restart.exclude=WEB-INF/**
51 51

52

52
#使用zookeeper当注册中心
53 53
spring.main.allow-bean-definition-overriding=true
54
dubbo.application.name=dubbo_consumer
55
dubbo.protocol.name=dubbo
54
#dubbo.application.name=dubbo_consumer
55
#dubbo.protocol.name=dubbo
56 56
dubbo.protocol.port=-1
57 57
dubbo.consumer.check=false
58
dubbo.registry.check=false
59
dubbo.registry.address=zookeeper://47.105.160.21:2108
60
dubbo.registry.client=curator
58
#dubbo.registry.check=false
59
#dubbo.registry.address=zookeeper://47.105.160.21:2108
60
#dubbo.registry.client=curator
61

62
#使用nacos当注册中心
63
dubbo.application.name=dubbo_consumer
64
dubbo.registry.address=nacos://47.105.160.21:8849
65
dubbo.protocol.name=dubbo
66


+ 11 - 0
ipu-rest-demo/src/main/resources/dev/bootstrap.properties

@ -0,0 +1,11 @@
1
2
spring.cloud.nacos.config.server-addr=47.105.160.21:8849
3
spring.cloud.nacos.config.prefix=example
4
spring.cloud.nacos.config.file-extension=properties
5
spring.cloud.nacos.config.group=DEFAULT_GROUP
6
spring.cloud.nacos.dataid=example
7
spring.cloud.nacos.group=DEFAULT_GROUP
8
spring.cloud.nacos.timeout=10000
9
spring.cloud.nacos.namespace
10
spring.cloud.nacos.discovery.server-addr=47.105.160.21:8849
11

+ 7 - 1
ipu-rest-demo/src/main/resources/sql/com/ai/ipu/ipu-db-demo.xml

@ -7,7 +7,13 @@
7 7
		</select>
8 8
		]]>
9 9
	</sql>
10
	
10
	<sql name="delete">
11
		<![CDATA[
12
		<select id="delete" resultType="java.util.Map">
13
	        DELETE FROM  ipu_db_demo WHERE pk=#{pk}
14
		</select>
15
		]]>
16
	</sql>
11 17
	<sql name="insert">
12 18
		<![CDATA[
13 19
		<insert id="insert" resultType="java.util.Map">