如何通知不同用户的工作状态变化?

时间:2018-08-16 12:42:37

标签: spring stomp

我正在构建作业计划应用程序-要求让用户和管理员监视在网页上运行的作业。用户仅应在管理员监视所有作业时看到自己的作业。我的设计是这样的,当一个作业被触发时,它被插入到具有下面结构的表中。随着工作的进行,其状态将在同一张表中进行相应的更新。

package main

import (
    "encoding/csv"
    "fmt"
    "io"
    "log"
    "strconv"
    "strings"
)

func main() {
    b := `
,,,,,,,,,,CHARGE,,,,,100.00,,,,,s1.c1
,,,,,,,,,,IGNORE,,,,,,,,,,
,,,,,,,,,,CHARGE,,,,,200.00,,,,,s2.c1
,,,,,,,,,,CHARGE,,,,,300.00,,,,,s3.c2
`

    r := csv.NewReader(strings.NewReader(b))

    byServer := make(map[string]float64)
    byCluster := make(map[string]float64)

    for i := 0; ; i++ {
        row, err := r.Read()
        if err == io.EOF {
            break
        }
        if err != nil {
            log.Fatal(err)
        }

        if row[10] != "CHARGE" {
            continue
        }

        cost, err := strconv.ParseFloat(row[15], 64)
        if err != nil {
            log.Fatalf("row %d: malformed cost: %v", i, err)
        }

        xs := strings.SplitN(row[20], ".", 2)
        if len(xs) != 2 {
            log.Fatalf("row %d: malformed resource name", i)
        }

        server, cluster := xs[0], xs[1]

        byServer[server] += cost
        byCluster[cluster] += cost
    }

    fmt.Printf("byServer: %+v\n", byServer)
    fmt.Printf("byCluster: %+v\n", byCluster)
}

// Output:
// byServer: map[s2:200 s3:300 s1:100]
// byCluster: map[c1:300 c2:300]

我对踩踏端点有一些基本的了解,所以我正在考虑采用这种技术。尽管管理员用户可以轻松地监视整个表,但我不知道如何为特定用户构建脚踏端点以监视其自身的工作状态。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以在此线程中找到示例: Spring websocket send to specific people

简而言之,有些方法可以将websocket发送给特定用户:

@Controller
public class GreetingController {

    @Autowired
    private SimpMessagingTemplate messagingTemplate;

    @MessageMapping("/hello")
    public void greeting(Principal principal, HelloMessage message) throws  Exception {
        Greeting greeting = new Greeting();
        greeting.setContent("Hello!");
        messagingTemplate.convertAndSendToUser(message.getToUser(), "/queue/reply", greeting);
    }
}

因此,您可以使用它向正在收听正在运行的作业的每个用户发送消息。