本文整理汇总了Golang中github.com/bitly/nsq/internal/http_api.NegotiateV1函数的典型用法代码示例。如果您正苦于以下问题:Golang NegotiateV1函数的具体用法?Golang NegotiateV1怎么用?Golang NegotiateV1使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NegotiateV1函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: TestTombstoneRecover
func TestTombstoneRecover(t *testing.T) {
opts := NewNSQLookupdOptions()
opts.Logger = newTestLogger(t)
opts.TombstoneLifetime = 50 * time.Millisecond
tcpAddr, httpAddr, nsqlookupd := mustStartLookupd(opts)
defer nsqlookupd.Exit()
topicName := "tombstone_recover"
topicName2 := topicName + "2"
conn := mustConnectLookupd(t, tcpAddr)
defer conn.Close()
identify(t, conn, "ip.address", 5000, 5555, "fake-version")
nsq.Register(topicName, "channel1").WriteTo(conn)
_, err := nsq.ReadResponse(conn)
equal(t, err, nil)
nsq.Register(topicName2, "channel2").WriteTo(conn)
_, err = nsq.ReadResponse(conn)
equal(t, err, nil)
endpoint := fmt.Sprintf("http://%s/topic/tombstone?topic=%s&node=%s",
httpAddr, topicName, "ip.address:5555")
_, err = http_api.NegotiateV1("POST", endpoint, nil)
equal(t, err, nil)
endpoint = fmt.Sprintf("http://%s/lookup?topic=%s", httpAddr, topicName)
data, err := http_api.NegotiateV1("GET", endpoint, nil)
equal(t, err, nil)
producers, _ := data.Get("producers").Array()
equal(t, len(producers), 0)
endpoint = fmt.Sprintf("http://%s/lookup?topic=%s", httpAddr, topicName2)
data, err = http_api.NegotiateV1("GET", endpoint, nil)
equal(t, err, nil)
producers, _ = data.Get("producers").Array()
equal(t, len(producers), 1)
time.Sleep(75 * time.Millisecond)
endpoint = fmt.Sprintf("http://%s/lookup?topic=%s", httpAddr, topicName)
data, err = http_api.NegotiateV1("GET", endpoint, nil)
equal(t, err, nil)
producers, _ = data.Get("producers").Array()
equal(t, len(producers), 1)
}
示例2: API
func API(endpoint string) (data *simplejson.Json, err error) {
d := make(map[string]interface{})
err = http_api.NegotiateV1(endpoint, &d)
data = simplejson.New()
data.SetPath(nil, d)
return
}
示例3: GetLookupdTopicChannels
// GetLookupdTopicChannels returns a []string containing a union of the channels
// from all the given lookupd for the given topic
func GetLookupdTopicChannels(topic string, lookupdHTTPAddrs []string) ([]string, error) {
success := false
var allChannels []string
var lock sync.Mutex
var wg sync.WaitGroup
for _, addr := range lookupdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/channels?topic=%s", addr, url.QueryEscape(topic))
log.Printf("LOOKUPD: querying %s", endpoint)
go func(endpoint string) {
data, err := http_api.NegotiateV1("GET", endpoint, nil)
lock.Lock()
defer lock.Unlock()
defer wg.Done()
if err != nil {
log.Printf("ERROR: lookupd %s - %s", endpoint, err.Error())
return
}
success = true
// {"data":{"channels":["test"]}}
channels, _ := data.Get("channels").StringArray()
allChannels = stringy.Union(allChannels, channels)
}(endpoint)
}
wg.Wait()
sort.Strings(allChannels)
if success == false {
return nil, errors.New("unable to query any lookupd")
}
return allChannels, nil
}
示例4: GetNSQDTopics
// GetNSQDTopics returns a []string containing all the topics
// produced by the given nsqd
func GetNSQDTopics(nsqdHTTPAddrs []string) ([]string, error) {
var topics []string
var lock sync.Mutex
var wg sync.WaitGroup
success := false
for _, addr := range nsqdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/stats?format=json", addr)
log.Printf("NSQD: querying %s", endpoint)
go func(endpoint string) {
data, err := http_api.NegotiateV1("GET", endpoint, nil)
lock.Lock()
defer lock.Unlock()
defer wg.Done()
if err != nil {
log.Printf("ERROR: lookupd %s - %s", endpoint, err.Error())
return
}
success = true
topicList, _ := data.Get("topics").Array()
for i := range topicList {
topicInfo := data.Get("topics").GetIndex(i)
topics = stringy.Add(topics, topicInfo.Get("topic_name").MustString())
}
}(endpoint)
}
wg.Wait()
sort.Strings(topics)
if success == false {
return nil, errors.New("unable to query any nsqd")
}
return topics, nil
}
示例5: GetLookupdProducers
// GetLookupdProducers returns a ProducerList metadata for each node connected to the given lookupds
func (c *ClusterInfo) GetLookupdProducers(lookupdHTTPAddrs []string) (ProducerList, error) {
var success bool
var output []*Producer
var lock sync.Mutex
var wg sync.WaitGroup
allProducers := make(map[string]*Producer)
maxVersion, _ := semver.Parse("0.0.0")
type respType struct {
Producers []*Producer `json:"producers"`
}
for _, addr := range lookupdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/nodes", addr)
c.logf("LOOKUPD: querying %s", endpoint)
go func(addr string, endpoint string) {
defer wg.Done()
var resp respType
err := http_api.NegotiateV1(endpoint, &resp)
if err != nil {
c.logf("ERROR: lookupd %s - %s", endpoint, err)
return
}
lock.Lock()
defer lock.Unlock()
success = true
for _, producer := range resp.Producers {
key := producer.TCPAddress()
p, ok := allProducers[key]
if !ok {
if maxVersion.LT(producer.VersionObj) {
maxVersion = producer.VersionObj
}
sort.Sort(producer.Topics)
p = producer
allProducers[key] = p
output = append(output, p)
}
p.RemoteAddresses = append(p.RemoteAddresses, fmt.Sprintf("%s/%s", addr, producer.Address()))
}
}(addr, endpoint)
}
wg.Wait()
if success == false {
return nil, errors.New("unable to query any lookupd")
}
for _, producer := range allProducers {
if producer.VersionObj.LT(maxVersion) {
producer.OutOfDate = true
}
}
sort.Sort(ProducersByHost{output})
return output, nil
}
示例6: deleteChannelHandler
func (s *httpServer) deleteChannelHandler(w http.ResponseWriter, req *http.Request) {
if req.Method != "POST" {
s.ctx.nsqadmin.logf("ERROR: invalid %s to POST only method", req.Method)
http.Error(w, "INVALID_REQUEST", 500)
return
}
reqParams := &http_api.PostParams{req}
topicName, channelName, err := http_api.GetTopicChannelArgs(reqParams)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
rd, _ := reqParams.Get("rd")
if !strings.HasPrefix(rd, "/") {
rd = fmt.Sprintf("/topic/%s", url.QueryEscape(topicName))
}
for _, addr := range s.ctx.nsqadmin.opts.NSQLookupdHTTPAddresses {
nsqlookupdVersion, err := lookupd.GetVersion(addr)
if err != nil {
s.ctx.nsqadmin.logf("ERROR: failed to get nsqlookupd %s version - %s", addr, err)
}
uri := "delete_channel"
if !nsqlookupdVersion.LT(v1EndpointVersion) {
uri = "channel/delete"
}
endpoint := fmt.Sprintf("http://%s/%s?topic=%s&channel=%s",
addr, uri,
url.QueryEscape(topicName),
url.QueryEscape(channelName))
s.ctx.nsqadmin.logf("LOOKUPD: querying %s", endpoint)
_, err = http_api.NegotiateV1("POST", endpoint, nil)
if err != nil {
s.ctx.nsqadmin.logf("ERROR: lookupd %s - %s", endpoint, err)
continue
}
}
producerAddrs := s.getProducers(topicName)
s.performVersionNegotiatedRequestsToNSQD(
s.ctx.nsqadmin.opts.NSQLookupdHTTPAddresses,
producerAddrs,
"delete_channel",
"channel/delete",
fmt.Sprintf("topic=%s&channel=%s",
url.QueryEscape(topicName), url.QueryEscape(channelName)))
s.notifyAdminAction("delete_channel", topicName, channelName, "", req)
http.Redirect(w, req, rd, 302)
}
示例7: deleteTopicHandler
func (s *httpServer) deleteTopicHandler(w http.ResponseWriter, req *http.Request) {
if req.Method != "POST" {
s.ctx.nsqadmin.logf("ERROR: invalid %s to POST only method", req.Method)
http.Error(w, "INVALID_REQUEST", 500)
return
}
reqParams := &http_api.PostParams{req}
topicName, err := reqParams.Get("topic")
if err != nil {
http.Error(w, "MISSING_ARG_TOPIC", 500)
return
}
rd, _ := reqParams.Get("rd")
if !strings.HasPrefix(rd, "/") {
rd = "/"
}
// for topic removal, you need to get all the producers *first*
producerAddrs := s.getProducers(topicName)
// remove the topic from all the lookupds
for _, addr := range s.ctx.nsqadmin.opts.NSQLookupdHTTPAddresses {
nsqlookupdVersion, err := lookupd.GetVersion(addr)
if err != nil {
s.ctx.nsqadmin.logf("ERROR: failed to get nsqlookupd %s version - %s", addr, err)
}
uri := "delete_topic"
if !nsqlookupdVersion.LT(v1EndpointVersion) {
uri = "topic/delete"
}
endpoint := fmt.Sprintf("http://%s/%s?topic=%s", addr, uri, url.QueryEscape(topicName))
s.ctx.nsqadmin.logf("LOOKUPD: querying %s", endpoint)
_, err = http_api.NegotiateV1("POST", endpoint, nil)
if err != nil {
s.ctx.nsqadmin.logf("ERROR: lookupd %s - %s", endpoint, err)
continue
}
}
s.performVersionNegotiatedRequestsToNSQD(
s.ctx.nsqadmin.opts.NSQLookupdHTTPAddresses,
producerAddrs,
"delete_topic",
"topic/delete",
fmt.Sprintf("topic=%s", url.QueryEscape(topicName)))
s.notifyAdminAction("delete_topic", topicName, "", "", req)
http.Redirect(w, req, rd, 302)
}
示例8: GetVersion
// GetVersion returns a semver.Version object by querying /info
func GetVersion(addr string) (semver.Version, error) {
endpoint := fmt.Sprintf("http://%s/info", addr)
log.Printf("version negotiation %s", endpoint)
info, err := http_api.NegotiateV1("GET", endpoint, nil)
if err != nil {
log.Printf("ERROR: %s - %s", endpoint, err)
return semver.Version{}, err
}
version := info.Get("version").MustString("unknown")
return semver.Parse(version)
}
示例9: TestChannelUnregister
func TestChannelUnregister(t *testing.T) {
opts := NewNSQLookupdOptions()
opts.Logger = newTestLogger(t)
tcpAddr, httpAddr, nsqlookupd := mustStartLookupd(opts)
defer nsqlookupd.Exit()
topics := nsqlookupd.DB.FindRegistrations("topic", "*", "*")
equal(t, len(topics), 0)
topicName := "channel_unregister"
conn := mustConnectLookupd(t, tcpAddr)
defer conn.Close()
tcpPort := 5000
httpPort := 5555
identify(t, conn, "ip.address", tcpPort, httpPort, "fake-version")
nsq.Register(topicName, "ch1").WriteTo(conn)
v, err := nsq.ReadResponse(conn)
equal(t, err, nil)
equal(t, v, []byte("OK"))
topics = nsqlookupd.DB.FindRegistrations("topic", topicName, "")
equal(t, len(topics), 1)
channels := nsqlookupd.DB.FindRegistrations("channel", topicName, "*")
equal(t, len(channels), 1)
nsq.UnRegister(topicName, "ch1").WriteTo(conn)
v, err = nsq.ReadResponse(conn)
equal(t, err, nil)
equal(t, v, []byte("OK"))
topics = nsqlookupd.DB.FindRegistrations("topic", topicName, "")
equal(t, len(topics), 1)
// we should still have mention of the topic even though there is no producer
// (ie. we haven't *deleted* the channel, just unregistered as a producer)
channels = nsqlookupd.DB.FindRegistrations("channel", topicName, "*")
equal(t, len(channels), 1)
endpoint := fmt.Sprintf("http://%s/lookup?topic=%s", httpAddr, topicName)
data, err := http_api.NegotiateV1("GET", endpoint, nil)
equal(t, err, nil)
returnedProducers, err := data.Get("producers").Array()
equal(t, err, nil)
equal(t, len(returnedProducers), 1)
}
示例10: GetVersion
// GetVersion returns a semver.Version object by querying /info
func (c *ClusterInfo) GetVersion(addr string) (semver.Version, error) {
endpoint := fmt.Sprintf("http://%s/info", addr)
c.logf("version negotiation %s", endpoint)
var resp struct {
Version string `json:'version'`
}
err := http_api.NegotiateV1(endpoint, &resp)
if err != nil {
c.logf("ERROR: %s - %s", endpoint, err)
return semver.Version{}, err
}
if resp.Version == "" {
resp.Version = "unknown"
}
return semver.Parse(resp.Version)
}
示例11: GetNSQDTopicProducers
// GetNSQDTopicProducers returns a []string containing the addresses of all the nsqd
// that produce the given topic out of the given nsqd
func (c *ClusterInfo) GetNSQDTopicProducers(topic string, nsqdHTTPAddrs []string) ([]string, error) {
var addresses []string
var lock sync.Mutex
var wg sync.WaitGroup
success := false
type respType struct {
Topics []struct {
Name string `json:"topic_name"`
} `json:"topics"`
}
for _, addr := range nsqdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/stats?format=json", addr)
c.logf("NSQD: querying %s", endpoint)
go func(endpoint, addr string) {
defer wg.Done()
var resp respType
err := http_api.NegotiateV1(endpoint, &resp)
lock.Lock()
defer lock.Unlock()
if err != nil {
c.logf("ERROR: nsqd %s - %s", endpoint, err.Error())
return
}
success = true
for _, t := range resp.Topics {
if t.Name == topic {
addresses = append(addresses, addr)
return
}
}
}(endpoint, addr)
}
wg.Wait()
if success == false {
return nil, errors.New("unable to query any nsqd")
}
return addresses, nil
}
示例12: TestClientAttributes
func TestClientAttributes(t *testing.T) {
userAgent := "Test User Agent"
opts := NewOptions()
opts.Logger = newTestLogger(t)
opts.Verbose = true
opts.SnappyEnabled = true
tcpAddr, httpAddr, nsqd := mustStartNSQD(opts)
defer os.RemoveAll(opts.DataPath)
defer nsqd.Exit()
conn, err := mustConnectNSQD(tcpAddr)
equal(t, err, nil)
defer conn.Close()
data := identify(t, conn, map[string]interface{}{
"snappy": true,
"user_agent": userAgent,
}, frameTypeResponse)
resp := struct {
Snappy bool `json:"snappy"`
UserAgent string `json:"user_agent"`
}{}
err = json.Unmarshal(data, &resp)
equal(t, err, nil)
equal(t, resp.Snappy, true)
r := snappystream.NewReader(conn, snappystream.SkipVerifyChecksum)
w := snappystream.NewWriter(conn)
readValidate(t, r, frameTypeResponse, "OK")
topicName := "test_client_attributes" + strconv.Itoa(int(time.Now().Unix()))
sub(t, readWriter{r, w}, topicName, "ch")
testURL := fmt.Sprintf("http://127.0.0.1:%d/stats?format=json", httpAddr.Port)
statsData, err := http_api.NegotiateV1("GET", testURL, nil)
equal(t, err, nil)
client := statsData.Get("topics").GetIndex(0).Get("channels").GetIndex(0).Get("clients").GetIndex(0)
equal(t, client.Get("user_agent").MustString(), userAgent)
equal(t, client.Get("snappy").MustBool(), true)
}
示例13: GetNSQDTopics
// GetNSQDTopics returns a []string containing all the topics produced by the given nsqd
func (c *ClusterInfo) GetNSQDTopics(nsqdHTTPAddrs []string) ([]string, error) {
var success bool
var topics []string
var lock sync.Mutex
var wg sync.WaitGroup
type respType struct {
Topics []struct {
Name string `json:"topic_name"`
} `json:"topics"`
}
for _, addr := range nsqdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/stats?format=json", addr)
c.logf("NSQD: querying %s", endpoint)
go func(endpoint string) {
defer wg.Done()
var resp respType
err := http_api.NegotiateV1(endpoint, &resp)
if err != nil {
c.logf("ERROR: lookupd %s - %s", endpoint, err)
return
}
lock.Lock()
defer lock.Unlock()
success = true
for _, topic := range resp.Topics {
topics = stringy.Add(topics, topic.Name)
}
}(endpoint)
}
wg.Wait()
if success == false {
return nil, errors.New("unable to query any nsqd")
}
sort.Strings(topics)
return topics, nil
}
示例14: GetLookupdTopics
// GetLookupdTopics returns a []string containing a union of all the topics
// from all the given lookupd
func (c *ClusterInfo) GetLookupdTopics(lookupdHTTPAddrs []string) ([]string, error) {
var success bool
var allTopics []string
var lock sync.Mutex
var wg sync.WaitGroup
type respType struct {
Topics []string `json:"topics"`
}
for _, addr := range lookupdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/topics", addr)
c.logf("LOOKUPD: querying %s", endpoint)
go func(endpoint string) {
defer wg.Done()
var resp respType
err := http_api.NegotiateV1(endpoint, &resp)
if err != nil {
c.logf("ERROR: lookupd %s - %s", endpoint, err)
return
}
lock.Lock()
defer lock.Unlock()
success = true
allTopics = append(allTopics, resp.Topics...)
}(endpoint)
}
wg.Wait()
if success == false {
return nil, errors.New("unable to query any lookupd")
}
allTopics = stringy.Uniq(allTopics)
sort.Strings(allTopics)
return allTopics, nil
}
示例15: GetLookupdTopicProducers
// GetLookupdTopicProducers returns a []string of the broadcast_address:http_port of all the
// producers for a given topic by unioning the results returned from the given lookupd
func (c *ClusterInfo) GetLookupdTopicProducers(topic string, lookupdHTTPAddrs []string) ([]string, error) {
success := false
var allSources []string
var lock sync.Mutex
var wg sync.WaitGroup
type respType struct {
Producers []Producer `json:"producers"`
}
for _, addr := range lookupdHTTPAddrs {
wg.Add(1)
endpoint := fmt.Sprintf("http://%s/lookup?topic=%s", addr, url.QueryEscape(topic))
c.logf("LOOKUPD: querying %s", endpoint)
go func(endpoint string) {
defer wg.Done()
var resp respType
err := http_api.NegotiateV1(endpoint, &resp)
lock.Lock()
defer lock.Unlock()
if err != nil {
c.logf("ERROR: lookupd %s - %s", endpoint, err.Error())
return
}
success = true
for _, producer := range resp.Producers {
allSources = stringy.Add(allSources, producer.HTTPAddress())
}
}(endpoint)
}
wg.Wait()
if success == false {
return nil, errors.New("unable to query any lookupd")
}
return allSources, nil
}