这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
Websocket 一对多通信
在一对一的基础上(点击此处跳转Websocket 一对一通信)
- 消息代理前缀,发送消息的前缀如果是 /topic ,就会把消息转发给消息代理,再把消息广播给所有客户端
private String name; // 消息来源
private String content; // 消息内容
- 重写HTML
<script>
var stompClient;
$(function () { // 点击连接按钮
$('#connect').click(function () {
connect();
}) // 点击断开连接按钮
$('#disconnect').click(function () {
stompClient.disconnect();
setConnect(false);
}) // 点击发送内容按钮
$('#send').click(function () {
stompClient.send('/hello',{},JSON.stringify({
'name':$('#username').val(),
'content':$('#content').val()
}))
})
})
function connect() {
if (!$('#username').val()) {// 判断是否添加用户名
return;
}
var socketjs = new SockJS("/chat");
stompClient = Stomp.over(socketjs);
stompClient.connect({},function (frame) {
setConnect(true);
stompClient.subscribe('/topic/greeting',function (greeting) {
var msgBody = JSON.parse(greeting.body);
$('#chat').append('<div>'+msgBody.name+' : '+ msgBody.content +'</div>')
})
})
}
function setConnect(connected) { // 按钮状态设置
$('#connect').prop('disabled',connected);
$('#disconnect').prop('disabled',!connected);
$('#send').prop('disabled',!connected);
}
</script>
服务器远程调用
- 创建serviceprovider&consumer (Spring Boot DevTools & Spring Web)
- entity 创建 MsgBea
public class MsgBean implements Serializable
private Integer id;
private String content;
private String statusId;//特征ID
- controller
@GetMapping("getMsgInfo")
public MsgBean getMsgInfo(){
MsgBean msgBean =new MsgBean();
msgBean.setId(1001);
msgBean.setContent("这里是服务提供方1 创建的msgbean *****从9090端口发出");
msgBean.setStatusId(UUID.randomUUID().toString()); //随机UUID
return msgBean;
}
- application:9090
- consumer MsgService
//远程调用 9090端口的服务器
// 需要用到RestTemplate
// 1.核心配置文件中配置RestTemplate
// 2. 使用RestTemplate
- config SpringConfig
//配置restTemplate
@Autowired
RestTemplate restTemplate;
@Autowired
DiscoveryClient discoveryClient;
- 调用9090,返回即可
restTemplate.getForObject("http://127.0.0.1:9090/getMsgInfo",MsgBean.class); - controller
@GetMapping("getRemoteMsgByService")
public MsgBean getRemoteMsgByService(){
MsgBean msg=msgService.getRemoteService();
return msg;
}
Serviceprovider cluster
- pom & maven
- application Spring名称统一
- provider
server.port=9090
#spring 应用名称
spring.application.name=serviceprovider-server
#注册eureka客户端
eureka.client.service-url.instance.prefer-ip-address=true
#指定客户端的ip地址
eureka.client.service-url.instance.ip-address=127.0.0.1
eureka.instance.instance-id=serviceprovider-server1-9090
#作为客户端指定注册中心的位置
#eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/
eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/,http://127.0.0.1:8892/eureka/,http://127.0.0.1:8893/eureka/
- provider2
server.port=9091
#spring 应用名称
spring.application.name=serviceprovider-server
#注册eureka客户端
eureka.client.service-url.instance.prefer-ip-address=true
#指定客户端的ip地址
eureka.client.service-url.instance.ip-address=127.0.0.1
eureka.instance.instance-id=serviceprovider-server1-9091
#作为客户端指定注册中心的位置
#eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/
eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/,http://127.0.0.1:8892/eureka/,http://127.0.0.1:8893/eureka/
- provider3
server.port=9092
#spring 应用名称
spring.application.name=serviceprovider-server
#注册eureka客户端
eureka.client.service-url.instance.prefer-ip-address=true
#指定客户端的ip地址
eureka.client.service-url.instance.ip-address=127.0.0.1
eureka.instance.instance-id=serviceprovider-server1-9092
#作为客户端指定注册中心的位置
#eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/
eureka.client.service-url.defaultZone=http://127.0.0.1:8891/eureka/,http://127.0.0.1:8892/eureka/,http://127.0.0.1:8893/eureka/
- 同步controller & entity
- CTRL C & CTRL V
@RestController
public class HelloController {
@GetMapping("getMsgInfo")
public MsgBean getMsgInfo(){
MsgBean msgBean =new MsgBean();
msgBean.setId(181203616);
msgBean.setContent("这里是服务提供方1 创建的msgbean *****从9090端口发出");
msgBean.setStatusId(UUID.randomUUID().toString());
return msgBean;
}
}
public class MsgBean implements Serializable {
private Integer id;
private String content;
private String statusId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getStatusId() {
return statusId;
}
public void setStatusId(String statusId) {
this.statusId = statusId;
}
@Override
public String toString() {
return "MsgBean{" +
"id=" + id +
", content='" + content + '\'' +
", statusId='" + statusId + '\'' +
'}';
}
}