这是我尝试实现一个简单的微服务,它应该从 kafka 服务器读取消息并通过 HTTP 发送它。当我从终端运行它时它工作正常,但是当部署到 docker 上时它会出现
panicpanic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x7b6345]
goroutine 12 [running]:
main.kafkaRoutine.func1(0xc420174060, 0x0, 0x0)
/go/src/github.com/deathcore666/ProperConsumerServiceYo/kafka.go:36 +0x95
created by main.kafkaRoutine
/go/src/github.com/deathcore666/ProperConsumerServiceYo/kafka.go:32 +0x1ad
kafka.go 第 32 和 36 行是 go func(pc sarama.PartitionConsumer) 函数所在的行。
我对编程比较陌生,所以任何帮助将不胜感激。谢谢!
main.go:
func main() {
var (
listen = flag.String("listen", ":8080", "HTTP listen address")
proxy = flag.String("proxy", "", "Optional comma-separated list of URLs to proxy uppercase requests")
)
flag.Parse()
logger := log.NewLogfmtLogger(os.Stderr)
var svc KafkaService
svc = kafkaService{}
svc = proxyingMiddleware(context.Background(), *proxy, logger)(svc)
svc = loggingMiddleware(logger)(svc)
consumehandler := httptransport.NewServer(
makeConsumeEndpoint(svc),
decodeConsumeRequest,
encodeResponse,
)
http.Handle("/consume", consumehandler)
logger.Log("msg", "HTTP", "addr", *listen)
logger.Log("err", http.ListenAndServe(*listen, nil))}
服务.go:
package main
import (
"context"
"errors"
"time"
)
//KafkaService yolo
type KafkaService interface {
Consume(context.Context, string) (string, error)
}
//ErrEmpty yolo
var ErrEmpty = errors.New("No topic provided")
type kafkaService struct{}
//Consumer logic implemented here
func (kafkaService) Consume(_ context.Context, topic string) (string, error) {
if topic == "" {
return "", ErrEmpty
}
var inChan = make(chan string)
var readyChan = make(chan struct{})
var result string
var brokers = []string{"192.168.88.208:9092"}
//var brokersLocal = []string{"localhost:9092"}
go kafkaRoutine(inChan, topic, brokers)
go func() {
for {
select {
case msg := <-inChan:
result = result + msg + "\n"
case <-time.After(time.Second * 1):
readyChan <- struct{}{}
}
}
}()
<-readyChan
close(inChan)
return result, nil
}
//ServiceMiddleware is a chainable thing for the service
type ServiceMiddleware func(KafkaService) KafkaService
kafka.go:
package main
import (
"fmt"
"time"
"github.com/Shopify/sarama"
)
func kafkaRoutine(inChan chan string, topic string, brokers []string) {
config := sarama.NewConfig()
config.Consumer.Return.Errors = true
consumer, err := sarama.NewConsumer(brokers, config)
if err != nil {
panic(err)
}
topics, _ := consumer.Topics()
if !(containsTopic(topics, topic)) {
inChan <- "There is no such a topic"
fmt.Println("kafkaroutine exited")
return
}
partitionList, err := consumer.Partitions(topic)
for _, partition := range partitionList {
pc, _ := consumer.ConsumePartition(topic, partition, sarama.OffsetOldest)
go func(pc sarama.PartitionConsumer) {
loop:
for {
select {
case msg := <-pc.Messages():
inChan <- string(msg.Value)
case <-time.After(time.Second * 1):
break loop
}
}
}(pc)
}
fmt.Println("Kafka GoRoutine exited")
}
func containsTopic(topics []string, topic string) bool {
for _, v := range topics {
if topic == v {
return true
}
}
return false
}
最佳答案
在 kafka.go 的第 27 行,您忽略了 ConsumePartition() 返回的错误。它很可能返回错误而不是有效的分区使用者,但由于您在尝试使用分区使用者时忽略了它,它会崩溃。
关于docker - 当部署到 Docker 时,在 Golang 中实现的 Apache Kafka 消费者会出现 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47301748/
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我需要在RubyonRails中实现无向图G=(V,E)并考虑构建一个Vertex和一个Edge模型,其中Vertex有_多条边。由于边恰好连接两个顶点,您将如何在Rails中执行此操作?您是否知道任何有助于实现此类图表的gem或库(对重新发明轮子不感兴趣;-))? 最佳答案 不知道有任何现有库在ActiveRecord之上提供图形逻辑。您可能必须实现自己的Vertex、EdgeActiveRecord支持的模型(请参阅Rails安装的rails/activerecord中的vertex.rb和edge.rb/test/fixtur
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答