Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用agent.job 想先登陆获取用户token,再带token去访问agent.job,无法实现 #202

Closed
wanglei8888 opened this issue Dec 6, 2023 · 23 comments

Comments

@wanglei8888
Copy link

image

image
配置信息:
{
"Success": {
"Url": "http://localhost:5566/jobagent",
"Method": "Post",
"Data": "",
"ContentType": "application/json",
"Timeout": 20000,
"QueueName": "recurring",
"AgentClass": "SRM.Application.Job.PerformanceAppraisalJob,SRM.Application",
"Headers": {
"Authorization": "#{#parent.data}"
},
"BasicUserName": "admin",
"BasicPassword": "test"
},
"RecurringJobIdentifier": "绩效考核定时任务",
"Url": "http://localhost:5566/login",
"Method": "Post",
"Data": "{"userName":"test-admin","password":"123456"}",
"ContentType": "application/json",
"Timeout": 20000,
"DelayFromMinutes": 15,
"Cron": "0 0 31 2 *",
"JobName": "绩效考核定时任务",
"QueueName": "recurring",
"AgentTimeout": 0,
"SendSuccess": false,
"SendFail": false,
"Mail": "",
"EnableRetry": false,
"RetryTimes": 0,
"BasicUserName": "admin",
"BasicPassword": "test",
"Headers": {}
}
日志:
image

@yuzd
Copy link
Owner

yuzd commented Dec 6, 2023

image

@wanglei8888
Copy link
Author

请问可以再job.agent里面打印表头这种操作吗?或者带入的参数

@wanglei8888
Copy link
Author

image
这个里面

@yuzd
Copy link
Owner

yuzd commented Dec 6, 2023

你是希望拿什么信息呢?
有试过从jobContext里面拿param吗

@wanglei8888
Copy link
Author

我是希望拿从父接口传入的信息,检测是否传正确得值例如:
Uploading image.png…

@wanglei8888
Copy link
Author

image

@yuzd
Copy link
Owner

yuzd commented Dec 6, 2023

jobContext对象里面有个Headers 你试试

@wanglei8888
Copy link
Author

image
获取没问题了
再冒昧的请教一个问题,我查询数据添加了sqlsugar的过滤器,会为所有表格添加一个过滤条件,但是这个过滤条件是从jwt鉴权的信息里面获取,但是我看job.agent 带上头部也不会获取到鉴权信息,job.agent是不是不是不是通过http方式实现的?事通过什么方式实现的? 请问我这个问题,有方法解决吗?

@wanglei8888
Copy link
Author

image

@yuzd
Copy link
Owner

yuzd commented Dec 6, 2023

hangfire是通过http方式请求调度agent的

如果你在agent上加过滤器的话 可能你需要把你的过滤器middlerware的顺序放在hangfireagent的middlerware的前面才会生效把。
https://github.com/yuzd/Hangfire.HttpJob/blob/master/Agent/Hangfire.HttpJob.Agent/JobAgentMiddleware.cs

@wanglei8888
Copy link
Author

image
你如果有时间的话,https://github.com/wanglei8888/HuanTian 这里有demo(HuanTian.Store项目),里面有我的注册顺序

@wanglei8888
Copy link
Author

即使放最后注册中间件也无法获取,请问有合适的解决方案推荐吗?

@yuzd
Copy link
Owner

yuzd commented Dec 8, 2023

建议啦代码调试下
理论上控制middreware的顺序应该是可行的额

@yuzd
Copy link
Owner

yuzd commented Dec 8, 2023

agent的请求接收是封装在一个middreware的
如果你的filter 能作用在这一层之前拿到请求进行处理 应该是可行的

@wanglei8888
Copy link
Author

1702014396212
1702014396218
因为有默认的Authorization,替换成其他的就可以了。
1702014398125
1702014396224
明明依赖注入的时候有值,但是进入方法之后,IHttpContextAccessor 值又为null了,不知道为什么

@yuzd
Copy link
Owner

yuzd commented Dec 8, 2023

原来被替换了

依赖注入没有,感觉像是HttpContextAccessor的使用方式有点问题
你参考下
https://stackoverflow.com/questions/52927463/access-httpcontextaccessor-from-startup-cs-in-net-core-webapi

@wanglei8888
Copy link
Author

我看了下源码,开了一个线程去执行这个任务,但是依赖注入被替换了. 这应该算是程序BUG把? 你提供的方法,解决不了,因为IHttpContextAccessor 为null,如何调用也是null

@wanglei8888
Copy link
Author

demo,我发你qq邮箱了

@yuzd
Copy link
Owner

yuzd commented Dec 10, 2023

好的 我看下

@yuzd
Copy link
Owner

yuzd commented Dec 12, 2023

agent的job收到了server的调度的时候,会开启一个新的线程去执行,只有这样才能执行长时间运行的任务,是这么设计的
至于为啥IHttpContextAccessor 对象的HttpContext为啥为null
在Construct构造方法的时候你看是有值的。
但是由于是异步执行job的OnStart方法,
执行构造方法的http请求线程已经处理完了,导致HttpContext变成null

不建议在Onstart方法里面去读取IHttpContextAccessor.HttpContext
你需要用到header信息应该直接从JobContext上下文中去拿

@wanglei8888
Copy link
Author

多谢了,作者大大!
我用的sqlSugar租户过滤器,每次查询都需要获取当前登陆用户的租户、 那看来使用httpjob更好一些,能完全契合框架,jobAgent不太适合我这种

@yuzd
Copy link
Owner

yuzd commented Dec 13, 2023

好的

@yuzd yuzd closed this as completed Dec 13, 2023
@wanglei8888
Copy link
Author

我还发现一个问题、回调函数执行的方法里打印无法生效
image
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants